API Endpoint Contract
trycompai/comp
The contract every new or modified API endpoint must follow so it is correct for the public OpenAPI spec, the MCP server (npm @trycompai/mcp-server), the ValidationPipe, and the docs.
Turns an OpenAPI or Swagger spec into an MCP server with the mcp-use TypeScript SDK, mapping each operation to a tool, wiring auth, testing and deploying.
$ npx skills add mcp-use/mcp-use --skill openapi-to-mcp -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install mcp-use/mcp-use openapi-to-mcp --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/mcp-use/mcp-use.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/openapi-to-mcp .claude/skills/openapi-to-mcp && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "openapi-to-mcp" agent skill from https://github.com/mcp-use/mcp-use/tree/main/skills/openapi-to-mcp into .claude/skills/openapi-to-mcp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "openapi-to-mcp", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/mcp-use/mcp-use/tree/main/skills/openapi-to-mcpType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add mcp-use/mcp-use --skill openapi-to-mcp -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install mcp-use/mcp-use openapi-to-mcp --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mcp-use/mcp-use.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/openapi-to-mcp .agents/skills/openapi-to-mcp && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "openapi-to-mcp" agent skill from https://github.com/mcp-use/mcp-use/tree/main/skills/openapi-to-mcp into .agents/skills/openapi-to-mcp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "openapi-to-mcp", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add mcp-use/mcp-use --skill openapi-to-mcp -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install mcp-use/mcp-use openapi-to-mcp --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mcp-use/mcp-use.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/openapi-to-mcp .cursor/skills/openapi-to-mcp && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "openapi-to-mcp" agent skill from https://github.com/mcp-use/mcp-use/tree/main/skills/openapi-to-mcp into .cursor/skills/openapi-to-mcp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "openapi-to-mcp", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/mcp-use/mcp-use.git --path skills/openapi-to-mcp--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add mcp-use/mcp-use --skill openapi-to-mcp -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install mcp-use/mcp-use openapi-to-mcp --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mcp-use/mcp-use.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/openapi-to-mcp .gemini/skills/openapi-to-mcp && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "openapi-to-mcp" agent skill from https://github.com/mcp-use/mcp-use/tree/main/skills/openapi-to-mcp into .gemini/skills/openapi-to-mcp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "openapi-to-mcp", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install mcp-use/mcp-use openapi-to-mcpInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add mcp-use/mcp-use --skill openapi-to-mcp -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/mcp-use/mcp-use.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/openapi-to-mcp .github/skills/openapi-to-mcp && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "openapi-to-mcp" agent skill from https://github.com/mcp-use/mcp-use/tree/main/skills/openapi-to-mcp into .github/skills/openapi-to-mcp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "openapi-to-mcp", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add mcp-use/mcp-use --skill openapi-to-mcp -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install mcp-use/mcp-use openapi-to-mcp --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mcp-use/mcp-use.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/openapi-to-mcp .opencode/skills/openapi-to-mcp && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "openapi-to-mcp" agent skill from https://github.com/mcp-use/mcp-use/tree/main/skills/openapi-to-mcp into .opencode/skills/openapi-to-mcp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "openapi-to-mcp", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
openapi-to-mcpTurns an OpenAPI or Swagger spec into an MCP server with the mcp-use TypeScript SDK, mapping each operation to a tool, wiring auth, testing and deploying.
An existing REST API described by an OpenAPI 3.x or Swagger 2.0 document becomes an MCP server in which each operation is one tool the LLM can call. The spec is treated as the contract: tool names, descriptions, parameters and auth requirements come from it rather than being invented, and every parameter, whether path, query or body, becomes a field in one zod object that carries over required flags, enums, limits and descriptions.
The recipe runs from scoping to deployment: gather the spec source as a file, URL or pasted text, the server base URL from the spec's servers list, and the auth scheme from its security schemes, asking which environment variable should hold any key and never asking for the secret itself. It then scaffolds with create-mcp-use-app, generates tools, wires apiKey, bearer, basic or OAuth bearer auth, tests live in the mcp-use inspector and deploys to Manufact or mcp-use cloud with one command.
Reference notes cover auth, code templates, deployment, mapping rules and testing. The skill also applies when a user describes an HTTP API without saying MCP and wants an LLM to call it.
11 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 649ff4b. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npxnpmghgitcurlFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npx, npm, gh, git and curl, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
API_KEYOPENAI_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
OpenAPI to MCP Server loads about 5.2k tokens when it runs, and up to ~17k if it reads all its reference files. Until then it costs about 241 tokens; SKILL.md has 2,389 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from mcp-use/mcp-use at commit 649ff4b, republished under its Apache-2.0 licence (© mcp-use). 2,389 words, ~5,178 tokens.
.claude/skills/openapi-to-mcp/SKILL.md (or your agent's skills folder). This skill also uses 6 other files; get the full folder from GitHub.Turn an existing REST API — described by an OpenAPI 3.x or Swagger 2.0 document — into an MCP server. Each operation in the spec becomes one MCP tool the LLM can call. The server runs locally for testing and ships to Manufact / mcp-use cloud with one command.
This skill is the end-to-end recipe: scope → ingest spec → map operations → scaffold → generate tools → wire auth → test → deploy.
The OpenAPI document is the source of truth. Tool names, descriptions, parameter shapes, and auth requirements all come from the spec — they should not be invented. This matters because:
summary: "Get current weather for a city", that's exactly what the LLM will read when deciding whether to call the tool. Hand-rolled summaries drift; spec-derived summaries stay in sync if the API changes.When in doubt, prefer mechanical fidelity to the spec over creativity. The LLM is doing the creative part — talking to the user — and only needs a faithful, well-typed handle on the API.
Before writing code, lock five things via the AskUserQuestion tool. All five are about the API and what to build — deployment is a separate question we ask later in step 10, when the user can actually evaluate it against a working server.
https://api.example.com/openapi.json), or pasted into chat. If pasted, save it to openapi.yaml or openapi.json first.servers[0].url in the spec if present; otherwise ask. Multiple servers entries are common (prod / staging) — confirm which one.components.securitySchemes. If multiple, ask which to use. If the API needs an API key or token, ask which env var should hold it (API_KEY, OPENAI_API_KEY, etc.). Don't ask for the secret itself — never put it in the conversation or commit it.pets, users), or a hand-picked list. Default to "all" for specs under ~30 operations; ask above that. See references/mapping-rules.md for filtering patterns.--template blank, any widgets → --template mcp-apps (which ships the resources/ widget infrastructure pre-wired). If the user wants widgets on most operations, the mcp-apps-builder skill is usually a better fit than this one — flag that and confirm before proceeding.Don't skip this step. Generating 200 tools the user doesn't need pollutes the LLM's tool list and slows it down.
Get the spec into a single dereferenced JSON object on disk. Dereferencing inlines $refs so downstream code never has to chase pointers.
# In the scaffolded project root
npm install @apidevtools/swagger-parser// scripts/load-spec.ts (run once, manually or as a build step)
import SwaggerParser from "@apidevtools/swagger-parser";
import { writeFileSync } from "node:fs";
const spec = await SwaggerParser.dereference("./openapi.yaml");
writeFileSync("./openapi.dereferenced.json", JSON.stringify(spec, null, 2));For URL specs, swagger-parser accepts the URL directly. For pasted YAML, write it to openapi.yaml first, then dereference. If the spec is Swagger 2.0, run it through swagger2openapi first (npx swagger2openapi --outfile openapi.yaml swagger.yaml).
Sanity-check the dereferenced file: open it, search for "$ref" — there should be none. If there are, the spec has circular refs and swagger-parser keeps them as-is; treat those refs as opaque object types in zod.
create-mcp-use-appPick the template based on the widget answer from step 1:
# Tools-only (the default for an OpenAPI wrapper)
npx create-mcp-use-app@latest <project-name> --template blank
# Any widgets at all
npx create-mcp-use-app@latest <project-name> --template mcp-appsLet the scaffold install dependencies and git init — both are useful (npm install runs mcp-use generate-types postinstall, and a git repo is required by npm run deploy later). The skill installs companion coding-agent skills by default too; that's fine.
Verify the template catalog with npx create-mcp-use-app@latest --list-templates if it's been a while — the available set is blank, mcp-server, mcp-apps as of this writing. Use blank for OpenAPI-first servers; mcp-server includes sample tools you'd rip out.
After scaffolding, add the two extra deps the OpenAPI flow needs:
cd <project-name>
npm install @apidevtools/swagger-parser dotenvWhat you get from blank (mcp-apps is a superset with resources/ + widget infrastructure):
index.ts at the root with a configured MCPServer instance — name, title, version, description. Commented-out examples for tools, resources, and prompts. Listens on process.env.PORT (default 3000).package.json with scripts wired to the mcp-use CLI: dev (hot reload + inspector), build, start, deploy. tsx, zod, and typescript are already in dev/regular deps; don't reinstall them.tsconfig.json pre-configured for ESM ("type": "module").public/ with a favicon and an SVG icon — served as static assets..git directory and an initial commit.The scaffold reserves the env var MCP_URL for the MCP server's own public base URL (used for widget asset URLs and similar). That is not the upstream API's base URL — name your upstream var BASE_URL (or API_BASE_URL if you want to be explicit) to avoid stepping on it.
Keep the tree shallow and predictable. The point is that someone reading the project for the first time can find the OpenAPI client, the tool wiring, and the auth in three obvious files.
<project>/
├── index.ts # MCPServer + server.tool() registration loop
├── openapi.yaml # The original spec (committed)
├── openapi.dereferenced.json # Dereferenced spec (gitignored; regenerated)
├── src/
│ ├── client.ts # fetch-based HTTP client (base URL + auth + error handling)
│ ├── auth.ts # Reads env vars, builds the auth header
│ ├── operations.ts # Loads dereferenced spec, exposes operation metadata
│ └── schema.ts # OpenAPI schema → zod converter
├── scripts/
│ └── load-spec.ts # Dereference helper (step 2)
├── .env.example # Document required env vars (API_KEY, BASE_URL, etc.)
└── package.jsonFor tiny specs (<10 operations) you can inline client.ts, auth.ts, and operations.ts into index.ts. For anything bigger, split — the LLM works better when each file has one job.
For every operation in the spec, you produce one server.tool({...}, handler) call. The mapping is mechanical:
| OpenAPI field | MCP tool field |
|---|---|
operationId (preferred) or ${method}_${path} sluggified | tool name (snake_case) |
summary + description | tool description |
parameters (path + query) + requestBody.content."application/json".schema | merged zod object → tool schema |
responses.200.content."application/json".schema | optional zod object → tool outputSchema |
security (or root-level fallback) | which auth headers the handler attaches |
Read references/mapping-rules.md for the full rules — including how to name tools when operationId is missing, how to handle oneOf / anyOf / nullable types in zod, how to flatten multi-content request bodies, and how to deal with the response-shape gotchas (binary downloads, streaming, paginated lists).
OpenAPI types map to zod as follows. The full converter lives in src/schema.ts — see references/code-templates.md for the implementation. Key choices:
type: string with enum → z.enum([...]). Use the OpenAPI description as the .describe() arg so the LLM sees it.type: integer / type: number → z.number().int() / z.number(). Carry over minimum, maximum, multipleOf.type: array → z.array(<itemType>). If minItems / maxItems exist, chain .min() / .max().type: object → z.object({...}). Required props are non-optional; others wrap in .optional().oneOf / anyOf → z.union([...]). allOf with object-only members → merge into one z.object.nullable: true (OpenAPI 3.0) or type: ["string", "null"] (3.1) → .nullable().Always call .describe(openapi.description ?? openapi.summary ?? "") on every field so the LLM gets human-readable hints when filling args.
src/client.ts exposes one function: callOperation(operationId, args) → Promise<unknown>. Internally it:
/users/{id} + {id: 42} → /users/42).?key=value.src/auth.ts.application/x-www-form-urlencoded if the spec says so).src/auth.ts reads from process.env based on the spec's securitySchemes. See references/auth.md for the four common schemes and how each becomes a header. Required env vars belong in .env.example — that's the contract for whoever runs the server later.
index.tsThe registration loop is small. Pseudocode:
import "dotenv/config";
import { MCPServer, text } from "mcp-use";
import { operations } from "./src/operations";
import { callOperation } from "./src/client";
import { operationToZod } from "./src/schema";
// Keep the MCPServer fields from the example (title, favicon, icons).
// Just adjust `name`, `title`, and `description` to match the API you're wrapping.
const server = new MCPServer({
name: "<api-name>",
title: "<API name>",
version: "1.0.0",
description: "MCP server wrapping the <API name> REST API",
favicon: "favicon.ico",
icons: [{ src: "icon.svg", mimeType: "image/svg+xml", sizes: ["512x512"] }],
});
for (const op of operations) {
server.tool(
{
name: op.toolName,
description: op.description,
schema: operationToZod(op),
},
async (args) => {
const result = await callOperation(op.operationId, args);
return text(typeof result === "string" ? result : JSON.stringify(result, null, 2));
},
);
}
// Streamable HTTP transport — the only supported transport for this skill.
// MCP endpoint: POST http://localhost:<port>/mcp
// Inspector: http://localhost:<port>/mcp/inspector
const PORT = process.env.PORT ? Number(process.env.PORT) : 3000;
server.listen(PORT);Transport must be streamable HTTP, not stdio. mcp-use's server.listen(port) sets up the streamable-HTTP transport at /mcp — that's the right choice for every server this skill generates. Don't substitute stdio. Stdio servers can't be deployed to Manufact / mcp-use cloud (cloud needs an HTTP endpoint to route traffic to), can't be tested with the online inspector, can't be installed as a custom connector in ChatGPT or Claude (both connect over HTTPS), and can't be hit with the curl tests in references/testing.md. Stdio is for local CLI-tool MCP servers, which is not what we're building here.
Full templates for each file in references/code-templates.md.
Start the dev server first — every test in this step assumes it's running:
npm run devThe log prints the port (default 3000, falls back to 3001 if taken), the MCP URL (http://localhost:<port>/mcp), and the inspector URL. Leave this running in one terminal; use a second terminal for the test commands below.
Then test in two layers. Don't claim "done" until both pass. Full recipes in references/testing.md.
Layer 1 — mcp-use client CLI. This is the first thing to reach for. The mcp-use package ships a CLI that talks streamable HTTP, handles session/auth bookkeeping, and gives a tools list / tools call / interactive loop straight from the terminal. No code, no curl arithmetic.
# Save the dev server under a short name
npx mcp-use client connect dev http://localhost:3000/mcp
# List and describe tools
npx mcp-use client dev tools list
npx mcp-use client dev tools describe <tool_name>
# Call a tool — args are key=value, or pass JSON for complex shapes
npx mcp-use client dev tools call <tool_name> limit=5
npx mcp-use client dev tools call <tool_name> '{"limit": 5, "filter": "active"}'
# REPL mode for fast iteration
npx mcp-use client dev interactiveFor CI / scripted tests, add --json and pipe to jq. If tools list returns nothing, your operation filter in index.ts killed everything or openapi.dereferenced.json is missing. If connect itself fails, the dev server isn't running or it's on a different port — drop to curl (see references/testing.md section "Raw protocol debugging") to confirm the endpoint is alive at all.
Layer 2 — Inspector chat (the real LLM loop). Layer 1 proves the server works. The inspector proves the LLM can use it — that the tool description is descriptive enough for the model to pick the right tool, that the zod schema has enough hints to fill args correctly, that the response shape isn't so weird the model can't summarize it.
http://localhost:<PORT>/mcp/inspector?server=http%3A%2F%2Flocalhost%3A<PORT>%2Fmcp&tab=chatTest both force-invocation ("Use list_pets with limit 5.") and free-form discovery ("Show me the first 5 pets in the store.") — the second is harder and the one that catches description quality.
Test the failure paths in both layers: missing required arg (zod rejection), wrong auth (upstream 401), upstream 5xx (point BASE_URL at a dead port). Both layers should degrade with a clean error, not a server crash.
If you see "Failed to resolve import" or stale tool definitions in either layer: rm -rf .mcp-use && npm run dev.
The server works locally. Now ask, via AskUserQuestion, whether to deploy it to mcp-use cloud or keep it local. Two options only — no need to enumerate alternatives:
https://<name>.run.mcp-use.com/mcp URL usable from ChatGPT, Claude, and any MCP client. Best when the server will be used by anyone other than the developer's own dev machine.If the user picks keep local, you're done — give them the inspector and /mcp URLs from step 9 and skip the rest of this step. Don't push deploy; premature deploys leak credentials and create stale public endpoints.
If the user picks deploy, the blank scaffold already wires npm run deploy to mcp-use deploy. Two commands once they're logged in:
npx mcp-use login
npm run deployThis currently requires a GitHub repo. If the project isn't on GitHub yet:
gh repo create <org>/<name> --private --source=. --pushAfter deploy you get a URL like https://<name>.run.mcp-use.com/mcp. Set the same env vars in the Manufact dashboard (the deploy CLI prints the link to the project page) so the production server has the same auth as your local one.
Full deploy walkthrough — including how to wire env vars in the dashboard, how to view logs, and how to set up branch deploys — is in references/deploy.md.
Before declaring done:
.env.example lists every required env var with a short comment.openapi.dereferenced.json is in .gitignore (regenerate from openapi.yaml).npm run build passes; npx tsc --noEmit is clean.curl https://<name>.run.mcp-use.com/mcp with a valid MCP response.Read these when the relevant step lands. Each file is a focused deep-dive — don't load them all upfront.
references/mapping-rules.md — Operation-to-tool mapping rules: naming, parameter merging, response handling, schema edge cases (oneOf/anyOf/allOf, nullable, recursive refs), filtering large specs.references/code-templates.md — Copy-ready skeletons for index.ts, src/client.ts, src/auth.ts, src/operations.ts, src/schema.ts, scripts/load-spec.ts, .env.example, and tsconfig.json. Each is annotated.references/auth.md — The four common auth schemes (apiKey, http bearer, http basic, OAuth2 bearer) and how each becomes a header. Includes the OAuth-with-refresh-token pattern.references/testing.md — Inspector recipe, the .mcp-use stale-cache trap, how to force-invoke a tool, what to check in tool responses, common 4xx/5xx debugging.references/deploy.md — mcp-use deploy, GitHub setup, env vars in the Manufact dashboard, branch deploys, observability tabs, and how to install the deployed URL as a custom MCP connector in ChatGPT or Claude.Use this skill whenever the user says anything in the cluster:
.yaml / .json spec and asks for an MCP versionmcp-apps-builder instead. This skill can layer a widget on one or two specific tools, but if widgets are the whole point, the other skill is the right starting frame. Confirm with the user during step 1.© mcp-use, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 6 other files (references) in skills/openapi-to-mcp of mcp-use/mcp-use.
Open the folder on GitHubat commit 649ff4b
OpenAPI to MCP Server next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| OpenAPI to MCP Server this skillmcp-use/mcp-use | 11k | — | ~5.2k | Automated safety check: Pass | Apache-2.0 | |
| API Endpoint Contracttrycompai/comp | 2k | — | ~2.7k | Automated safety check: Pass | AGPL-3.0 | |
| Frontmcp Developmentagentfront/frontmcp | 146 | — | ~11k | Automated safety check: Pass | Apache-2.0 | |
| API Endpointslatitude-dev/latitude-llm | 4.7k | — | ~6.5k | Automated safety check: Pass | MIT | |
| PR Reviewconfluentinc/mcp-confluent | 167 | — | ~4.6k | Automated safety check: Notes | MIT | |
| MCP Server Builderalirezarezvani/claude-skills | 28k | — | ~985 | Automated safety check: Pass | MIT |
trycompai/comp
The contract every new or modified API endpoint must follow so it is correct for the public OpenAPI spec, the MCP server (npm @trycompai/mcp-server), the ValidationPipe, and the docs.
agentfront/frontmcp
A skill your agent uses when building any FrontMCP server component other than a tool (for tools, use create-tool).
latitude-dev/latitude-llm
Adding or changing API operations in @repo/operations. An agent skill from latitude-dev/latitude-llm.
confluentinc/mcp-confluent
Reviews pull requests for the Confluent MCP server. An agent skill from confluentinc/mcp-confluent.
alirezarezvani/claude-skills
Design and ship production-ready MCP (Model Context Protocol) servers from OpenAPI contracts instead of hand-written tool wrappers.
borghei/Claude-Skills
Build MCP (Model Context Protocol) servers with tool definitions, resource providers, prompt templates, and transports.
mcp-use/mcp-use
Builds, modifies, debugs, migrates and verifies TypeScript MCP servers and MCP Apps with the mcp-use framework, treating the installed package's types as the source of truth.
Categories
Turns an OpenAPI or Swagger spec into an MCP server with the mcp-use TypeScript SDK, mapping each operation to a tool, wiring auth, testing and deploying. 0 document becomes an MCP server in which each operation is one tool the LLM can call. The spec is treated as the contract: tool names, descriptions, parameters and auth requirements come from it rather than being invented, and every parameter, whether path, query or body, becomes a field in one zod object that carries over required flags, enums, limits and descriptions.
OpenAPI to MCP Server fits situations like: wrapping a REST API as MCP tools from its openapi.yaml; making an API usable from Claude or ChatGPT; generating tools from a swagger.json file; deploying a spec-derived MCP server to mcp-use cloud.
Run `npx skills add mcp-use/mcp-use --skill openapi-to-mcp -a claude-code`. Or copy the skill folder (skills/openapi-to-mcp in mcp-use/mcp-use) into .claude/skills/openapi-to-mcp in your project. Claude Code loads it when a task matches its description.
Run `npx skills add mcp-use/mcp-use --skill openapi-to-mcp -a codex`. Or copy the skill folder (skills/openapi-to-mcp in mcp-use/mcp-use) into .agents/skills/openapi-to-mcp in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add mcp-use/mcp-use --skill openapi-to-mcp -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/openapi-to-mcp, .gemini/skills/openapi-to-mcp, .github/skills/openapi-to-mcp and .opencode/skills/openapi-to-mcp in your project.
Going by SKILL.md and its folder, OpenAPI to MCP Server needs the command-line tools its instructions call (npx, npm, gh, git and curl) and credentials named API_KEY and OPENAI_API_KEY. Our summary lists: An OpenAPI 3.x or Swagger 2.0 spec as a file, URL or pasted text; An environment variable for the API key if the API needs one.
SKILL.md contains no URLs. Its commands use npx, npm, gh, git and curl, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
OpenAPI to MCP Server is published under the Apache-2.0 licence (from the LICENSE file in the skill folder). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.2k tokens (SKILL.md is roughly 21k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 12k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with OpenAPI to MCP Server: API Endpoint Contract (trycompai/comp, 2k stars), Frontmcp Development (agentfront/frontmcp, 146 stars), API Endpoints (latitude-dev/latitude-llm, 4.7k stars) and PR Review (confluentinc/mcp-confluent, 167 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
mcp-use (a GitHub organization) maintains it in mcp-use/mcp-use, which has 10,734 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on October 9, 2026.
Source: mcp-use/mcp-use on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.