
OpenAPI Services
io.github.alyioxPublished by GitHub account alyioxv0.2.1Updated Oct 24, 2026
MCP server that fronts any OpenAPI service: discover operations from its spec and call them
Overview
A local MCP server that fronts any OpenAPI service: it discovers operations from the service's spec and lets an assistant call them through one generic proxy.
- What you can do
- List configured platforms, regions, services and environments, including load errors for failed ones. Browse a service's operations, filtered by query, tag or method. Describe one operation together with the schemas it references. Execute an operation, or a raw method and path not present in the spec. Read full truncated responses and equivalent curl commands as MCP resources.
- When to use it
- Useful when an assistant needs to work against one or more OpenAPI-documented backends, especially several deployments of the same API, without a dedicated MCP server per service. Also handy for exploring an API's operations and schemas before calling them.
- Requirements
- Runs locally over stdio with Python 3.13+ and uv (for example via uvx). Needs a config.json at ~/.config/mcp-openapix/config.json describing platforms, regions, services and environments, with each service's spec path and base URLs. Network access to fetch specs and call APIs. Optional token helpers are external commands named in the config.
Installation
In SourceWeft
- Open OpenAPI Services in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
mcp-openapix
[CI] [PyPI] [Python 3.13+] [License: MIT]
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.
Requirements
- Python 3.13+ and
uv - A
config.jsondescribing the deployments you hold credentials for
Quick start
Set up your config (see Configuration), then run the server:
Configuration
config.json MUST live at ~/.config/mcp-openapix/config.json
(%USERPROFILE%\.config\… on Windows). config.example.json is a full template.
platforms
A hierarchy of platform → region → services → service → env. Each service declares:
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_helpers
Named token helpers, in the same shape as an MCP server entry:
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:
If no level declares a helper, the deployment is unauthenticated. Omit
token_helper for public deployments.
headers
Constant headers added to every API call — for APIs that require a tenant, product or locale header:
defaults
Makes every tool argument optional: a call falls back to defaults.platform, .region,
.service, .env, .username and .token_helper when they are omitted.
Top-level options
Splitting the config
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:
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.jsonis read first, then every*.jsondirectly inconfig.d/in sorted order. Subdirectories,.bakand editor swap files are ignored; noconfig.d/means no change in behavior.- A drop-in MAY declare anything
config.jsonmay, andconfig.jsonMAY be nearly empty. - Files merge as if pasted into one config in that order: objects merge key by key, and
a later scalar or list replaces the earlier one. A later file can therefore override a
single
envs.prod.urlor onedefaultsfield.
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:
Tools
Operation ids
Many OpenAPI documents omit operationId, so the server synthesizes one as "<METHOD> <path>":
Where a spec does declare an operationId, that value wins.
Specs
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:
MCP resources
Both expire response_cache_ttl seconds after the call. The curl command may embed
a short-lived token.
Tokens at rest
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:
MCP host examples
Cursor / Claude Code
Codex
Development
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.
License
MIT.
Source: README.md at commit 7f06aab
Tools
0Version history
4- v0.2.1LatestSep 30, 2026
- v0.2.0Sep 29, 2026
- v0.1.1Sep 28, 2026
- v0.1.0Sep 21, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts