Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Description from the maker (original English)
MCP server that fronts any OpenAPI service: discover operations from its spec and call them
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"openapix": {
"command": "uvx",
"args": [
"mcp-openapix"
]
}
}
}Run this in your terminal
claude mcp add openapix -- uvx mcp-openapixPaste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"openapix": {
"command": "uvx",
"args": [
"mcp-openapix"
]
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"openapix": {
"type": "stdio",
"command": "uvx",
"args": [
"mcp-openapix"
]
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 7, 2026
The registry name was verified with the GitHub account alyiox, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
The registry does not list a required key, though some servers ask you to sign in on first use.
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (0.2.1) reached the registry 38 days ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Python (uv) on your computer.
In the same category: Spec Driven Development, Remote Desktop Commander, Intervals MCP
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
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.
Remote MCP server for intervals.icu run data and analysis
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
MCP server that fronts any OpenAPI service behind four generic tools.
An agent finds operations in each deployment's OpenAPI document and calls them; the server resolves the URL, obtains a bearer token, and builds the request. Discovery is list_platforms, list_endpoints and describe_endpoint; execution is the generic proxy call_endpoint.
example / us / items / prod
│ │ │ └── env ......... which deployment URL a call reaches │ │ └───────── service ..... one backend, one OpenAPI spec │ └─────────────── region ...... a geographic deployment └───────────────────── platform .... the product or API family
uvconfig.json describing the deployments you hold credentials forSet up your config (see Configuration), then run the server:
# Run directly with uvx (no clone needed)
npx -y @modelcontextprotocol/inspector@latest uvx mcp-openapix
# Or run from source
npx -y @modelcontextprotocol/inspector@latest uv run mcp-openapix
config.json MUST live at ~/.config/mcp-openapix/config.json (%USERPROFILE%\.config\… on Windows). config.example.json is a full template.
{
"headers": { "accept": "application/json" }, "defaults": { "platform": "example", "region": "us", "service": "items", "env": "prod" }, "platforms": { "example": { "regions": { "us": { "services": { "token_helper": "us", "items": { "desc": "Catalogue and inventory API", "spec_path": "/swagger/v1/swagger.json", "canonical_env": "prod", "envs": { "prod": { "url": "https://api.example.com/items" }, "dev": { "url": "https://api-dev.example.com/items" } } } } } } } }, "token_helpers": { "us": { "command": "token-helper", "args": ["issue"] } } }
platformsA hierarchy of platform → region → services → service → env. Each service declares:
| Field | Notes |
|---|---|
spec_path | Required. The OpenAPI JSON endpoint relative to the service URL |
canonical_env | Required when more than one env is configured — the env whose URL the spec is fetched from |
envs | Required. One entry per deployment environment, each carrying a full base url |
desc | Optional. A short description surfaced by list_platforms |
token_helper | Optional. The token helper this level binds to |
The services object may also contain a token_helper default applying to all services in that region. A service or environment can override it.
token_helpersNamed token helpers, in the same shape as an MCP server entry:
| Field | Required | Default | Notes |
|---|---|---|---|
command | yes | — | Resolved on PATH; never run through a shell |
args | no | [] | Passed verbatim |
timeout | no | 60 | Seconds before the helper's process group is killed; at most 300 |
The config names a command and nothing else, so config.json holds no secrets. The complete helper invocation and output contract is documented in docs/token-protocol.md.
Which helper a call uses is resolved most-specific-first:
env.token_helper → service.token_helper → services.token_helper
→ region.token_helper → platform.token_helper → defaults.token_helper
If no level declares a helper, the deployment is unauthenticated. Omit token_helper for public deployments.
headersConstant headers added to every API call — for APIs that require a tenant, product or locale header:
"headers": { "accept": "application/json", "x-product": "example" }
defaultsMakes every tool argument optional: a call falls back to defaults.platform, .region, .service, .env, .username and .token_helper when they are omitted.
| Field | Default | Notes |
|---|---|---|
truncate_threshold | 4096 | Response bytes returned inline before truncating to a preview |
response_cache_ttl | 3600 | Seconds a truncated body stays readable at its resource URI |
spec_refresh | {"auto": true, "interval": 7} | Background spec refresh; interval is days and MAY be fractional |
A stray comma while editing one platform takes down every platform: a parse failure precedes per-platform validation. The config MAY therefore be split into drop-in files under config.d/, in the style of an nginx conf.d. The recommended layout keeps server-wide settings in config.json and gives each platform its own file, named after it:
~/.config/mcp-openapix/
├── config.json # defaults, headers, token_helpers, top-level options └── config.d/ ├── acme.json # {"platforms": {"acme": …}} └── public.json # {"platforms": {"public": …}}
A typo then costs one platform, and a platform can be handed over, or removed, as a single file. Token helpers stay in config.json because they are usually shared across platforms; a helper only one platform uses MAY live beside it in that platform's file.
The layout is a convention, not a rule:
config.json is read first, then every *.json directly in config.d/ in sorted order. Subdirectories, .bak and editor swap files are ignored; no config.d/ means no change in behavior.config.json may, and config.json MAY be nearly empty.envs.prod.url or one defaults field.A file that fails to parse costs only what it declares; the rest keep working. A malformed platform, in any file, MUST NOT stop the others loading, and neither does a missing token helper it names: its error lists any files that were skipped, since the helper may be declared in one. list_platforms shows a platform that failed with no regions and the loader's error, and a skipped file as {"file", "error"}; calling into a failed platform returns the same message. Defaults that point into a failed platform are ignored. An invalid setting outside platforms still stops the server, and the message names the file that set it.
A fix needs a restart. Check the config first, without starting the server; it also lists every value a later file overrode:
uvx mcp-openapix --check-config
| Tool | Purpose |
|---|---|
list_platforms | Every platform with its regions, services, and envs |
list_endpoints | A service's operations, filtered by query, tag or method |
describe_endpoint | One operation plus the transitive closure of the schemas it references |
call_endpoint | Execute an operation, or a raw method + path absent from the spec |
Many OpenAPI documents omit operationId, so the server synthesizes one as " ":
POST /api/items
└─┬─┘ └───┬───┘ method path as the spec declares it
Where a spec does declare an operationId, that value wins.
Specs are not bundled. Each deployment's document is fetched on demand — an unauthenticated GET — and cached under ~/.cache/mcp-openapix/{platform}/{region}/{service}.json.
A document MUST declare at least one operation before it is installed, so a deployment answering 200 with an error body cannot replace a working snapshot with one that serves nothing.
Cached specs refresh in the background: once at startup, then every spec_refresh.interval days. Set auto to false to stop it; the manual lever still works:
uvx mcp-openapix --refresh
| Resource URI | Description |
|---|---|
openapi://responses/{request_id} | Full body of a truncated call_endpoint response |
openapi://curl/{request_id} | Equivalent curl command for a call_endpoint request |
Both expire response_cache_ttl seconds after the call. The curl command may embed a short-lived token.
Tokens are cached in memory and, when expiry metadata is available, under ~/.cache/mcp-openapix/tokens/ (mode 0600) keyed by the token-helper declaration and username. This lets client sessions share a login without spawning a helper each. A 401 retires the cached token so the next call obtains a fresh one. To clear them all:
uvx mcp-openapix --logout
Cursor / Claude Code
{
"mcpServers": { "openapi": { "command": "uvx", "args": ["mcp-openapix"] } } }
Codex
[mcp_servers.openapi]
command = "uvx" args = ["mcp-openapix"]
uv sync --extra dev
uv run ruff check . uv run ruff format --check . uv run pyright uv run pytest
All four MUST pass; see AGENTS.md. Tests use respx to mock HTTP and real subprocesses for token helpers, so no live API access is required.
MIT.