Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
OpenAPI lifecycle guard and MCP sidecar for policy-driven API orchestration.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"x-openapi-flow": {
"command": "npx",
"args": [
"-y",
"x-openapi-flow"
]
}
}
}在终端中运行这条命令
claude mcp add x-openapi-flow -- npx -y x-openapi-flow粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"x-openapi-flow": {
"command": "npx",
"args": [
"-y",
"x-openapi-flow"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"x-openapi-flow": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"x-openapi-flow"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过 GitHub 账户 tiago-marques 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(1.7.4)于6个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。
同一分类中有:Spec Driven Development, Remote Desktop Commander, MemberVault MCP by usefulapi
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ 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.
List courses; add users to courses, remove course access or delete users in MemberVault.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
🚀 2,100+ downloads in the first 3 weeks!
npx x-openapi-flow init --suggest-transitions
See your API lifecycle come alive from your OpenAPI spec, with one simple command
Validate, document, and generate flow-aware SDKs automatically.
openapi.json → describes your API
openapi.x.json → describes how to use it (flows)
x-openapi-flow adds a declarative state machine to your OpenAPI spec.
Model resource lifecycles, enforce valid transitions, and generate flow-aware artifacts for documentation, SDKs, and automation.
Define stateful workflows and lifecycle transitions directly inside your OpenAPI operations:
{
"operationId": "createOrder", "x-openapi-flow": { "version": "1.0", "id": "create-order", "current_state": "created", "description": "Creates an order and starts the lifecycle", "transitions": [ { "transition_id": "order-created-to-paid", "trigger_type": "synchronous", "condition": "Payment is confirmed", "decision_rule": "payOrder:response.200.body.payment_status == 'approved'", "target_state": "paid", "next_operation_id": "payOrder", "operation_role": "mutate", "prerequisite_operation_ids": ["createOrder"], "evidence_refs": [ "payOrder:response.200.body.payment_status" ], "propagated_field_refs": [ "createOrder:response.201.body.order_id" ], "failure_paths": [ { "reason": "Payment denied", "target_state": "payment_failed", "next_operation_id": "getOrder" } ] } ] } }
This flow defines an order lifecycle directly inside your OpenAPI:
created statepaid when payment is confirmedInstead of manually orchestrating API calls, the workflow is fully described alongside your API specification.
Building APIs is cheap. Building complex, multi-step APIs that teams actually use correctly is hard.
Teams face recurring problems:
x-openapi-flow exists to solve these pains: it makes lifecycles explicit, validates transitions automatically, and generates flow-aware docs and SDKs — so teams move faster, make fewer mistakes, and ship confident integrations.
Turn your OpenAPI spec into a single source of truth for API behavior:
export-llm-flows) — or call it directly as an MCP tool — so an agent like Claude Code knows the exact call order, decision rules, and field refs to implement an integration, without re-deriving them from human docsPrefer no local setup? Open the minimal runtime-guard demo directly in your browser:
Once open, run:
npm install
npm run start
Then in another terminal:
curl -s -X POST http://localhost:3110/orders
curl -i -X POST http://localhost:3110/orders/ /ship
Expected: 409 INVALID_STATE_TRANSITION.
Fastest way to see value (guided scaffold):
npx x-openapi-flow quickstart
cd x-openapi-flow-quickstart npm install npm start
Optional runtime:
npx x-openapi-flow quickstart --runtime fastify
Then run:
curl -s -X POST http://localhost:3110/orders
curl -i -X POST http://localhost:3110/orders/ /ship
Expected: 409 INVALID_STATE_TRANSITION.
Initialize flow support in your project:
npx x-openapi-flow init
npx x-openapi-flow init --suggest-transitions
After regenerating your OpenAPI file, apply and validate the flow (optional):
npx x-openapi-flow apply openapi.yaml --out openapi.flow.yaml
npx x-openapi-flow validate openapi.flow.yaml --profile strict --strict-quality
This will:
💡 Tip: run this in CI to enforce API workflow correctness
For larger APIs, you can define flow rules by resource (with shared transitions/defaults) and reduce duplication in sidecar files.
See: Sidecar Contract
Use the official reusable action to validate lifecycle rules in CI with a single step:
- name: Validate OpenAPI flow rules
uses: tiago-marques/x-openapi-flow@v1 with: openapi-file: openapi.flow.yaml profile: strict strict-quality: "true"
Integration guide: GitHub-Actions-Integration.md
Here’s a real-world payment lifecycle represented in x-openapi-flow:
CREATED -> AUTHORIZED -> CAPTURED -> REFUNDED
Generate a visual graph of the lifecycle:
npx x-openapi-flow graph openapi.flow.yaml --format mermaid
Resulting diagram:
graph TD
CREATED --> AUTHORIZED AUTHORIZED --> CAPTURED CAPTURED --> REFUNDED
This visualization makes your API workflow explicit, easy to communicate, and ready for documentation or demos.
Create a TypeScript or Python SDK that respects your API’s lifecycle and transition rules, following best practices seen in leading companies like Stripe and Adyen:
npx x-openapi-flow generate-sdk openapi.flow.yaml --lang typescript --output ./sdk
npx x-openapi-flow generate-sdk openapi.flow.yaml --lang python --output ./sdk
Example usage (TypeScript):
const payment = await sdk.payments.create({ amount: 1000 });
await payment.authorize(); await payment.capture();
Example usage (Python — zero-dependency, stdlib urllib-backed client, generated under ./sdk/src):
from src import FlowApiClient
from src.http_client import UrllibHttpClient
client = FlowApiClient(UrllibHttpClient("https://api.example.com")) payment = client.payment.create({"body": {"amount": 1000}}) payment = payment.authorize() payment = payment.capture()
This SDK guides developers through valid transition paths, following patterns used by market leaders to ensure safe and intuitive integrations.
CI validation is important, but production safety needs request-time enforcement.
x-openapi-flow now includes an official runtime guard for Node.js that can block invalid state transitions during request handling.
operationId (when available) or by method + route409 error payloadsInstall and use directly in your API server:
const {
createExpressFlowGuard, createFastifyFlowGuard, createHonoFlowGuard, } = require("x-openapi-flow/lib/runtime-guard");
Express example:
const express = require("express");
const { createExpressFlowGuard } = require("x-openapi-flow/lib/runtime-guard"); const openapi = require("./openapi.flow.json");
const app = express();
app.use( createExpressFlowGuard({ openapi, async getCurrentState({ resourceId }) { if (!resourceId) return null; return paymentStore.getState(resourceId); // your DB/service lookup }, resolveResourceId: ({ params }) => params.id || null, }) );
Fastify example:
const fastify = require("fastify")();
const { createFastifyFlowGuard } = require("x-openapi-flow/lib/runtime-guard"); const openapi = require("./openapi.flow.json");
fastify.addHook( "preHandler", createFastifyFlowGuard({ openapi, async getCurrentState({ r
只显示了开头部分;其余内容请在仓库中阅读