OpenAPI to MCP Server
mcp-use/mcp-use
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.
A skill your agent uses when integrating Apidog + OpenAPI specifications with your React app.
$ npx skills add MadAppGang/claude-code --skill api-integration -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install MadAppGang/claude-code api-integration --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/MadAppGang/claude-code.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/frontend/skills/api-integration .claude/skills/api-integration && 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 "api-integration" agent skill from https://github.com/MadAppGang/claude-code/tree/main/plugins/frontend/skills/api-integration into .claude/skills/api-integration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "api-integration", 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/MadAppGang/claude-code/tree/main/plugins/frontend/skills/api-integrationType 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 MadAppGang/claude-code --skill api-integration -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install MadAppGang/claude-code api-integration --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/MadAppGang/claude-code.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/frontend/skills/api-integration .agents/skills/api-integration && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "api-integration" agent skill from https://github.com/MadAppGang/claude-code/tree/main/plugins/frontend/skills/api-integration into .agents/skills/api-integration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "api-integration", 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 MadAppGang/claude-code --skill api-integration -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install MadAppGang/claude-code api-integration --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/MadAppGang/claude-code.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/frontend/skills/api-integration .cursor/skills/api-integration && 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 "api-integration" agent skill from https://github.com/MadAppGang/claude-code/tree/main/plugins/frontend/skills/api-integration into .cursor/skills/api-integration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "api-integration", 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/MadAppGang/claude-code.git --path plugins/frontend/skills/api-integration--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 MadAppGang/claude-code --skill api-integration -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install MadAppGang/claude-code api-integration --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/MadAppGang/claude-code.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/frontend/skills/api-integration .gemini/skills/api-integration && 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 "api-integration" agent skill from https://github.com/MadAppGang/claude-code/tree/main/plugins/frontend/skills/api-integration into .gemini/skills/api-integration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "api-integration", 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 MadAppGang/claude-code api-integrationInstalls 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 MadAppGang/claude-code --skill api-integration -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/MadAppGang/claude-code.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/frontend/skills/api-integration .github/skills/api-integration && 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 "api-integration" agent skill from https://github.com/MadAppGang/claude-code/tree/main/plugins/frontend/skills/api-integration into .github/skills/api-integration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "api-integration", 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 MadAppGang/claude-code --skill api-integration -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install MadAppGang/claude-code api-integration --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/MadAppGang/claude-code.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/frontend/skills/api-integration .opencode/skills/api-integration && 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 "api-integration" agent skill from https://github.com/MadAppGang/claude-code/tree/main/plugins/frontend/skills/api-integration into .opencode/skills/api-integration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "api-integration", 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.
api-integrationA skill your agent uses when integrating Apidog + OpenAPI specifications with your React app.
API Integration is an agent skill from MadAppGang/claude-code. Use when integrating Apidog + OpenAPI specifications with your React app. Covers MCP server setup, type generation, and query layer integration. Use when setting up API clients, generating types from OpenAPI, or integrating with Apidog MCP.
Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Backend & APIs, covering OpenAPI specifications, Third-party API integration and MCP servers. It works with Model Context Protocol, OpenAPI and React. The repository describes itself as: claude code plugins marketplace. The licence is MIT.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 6097ad4. 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:
pnpmnpxFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
api.main.comapi.auth.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
API Integration loads about 2.6k tokens when it runs. Until then it costs about 64 tokens; SKILL.md has 262 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 MadAppGang/claude-code at commit 6097ad4, republished under its MIT licence (© MadAppGang). 262 words, ~2,554 tokens.
.claude/skills/api-integration/SKILL.md (or your agent's skills folder).Integrate OpenAPI specifications with your frontend using Apidog MCP for single source of truth.
The AI agent always uses the latest API specification to generate types and implement features correctly.
Apidog (or Backend)
→ OpenAPI 3.0/3.1 Spec
→ MCP Server (apidog-mcp-server)
→ AI Agent reads spec
→ Generate TypeScript types
→ TanStack Query hooks
→ React ComponentsOption A: Remote URL
https://api.example.com/openapi.json)Option B: Local File
./api-spec/openapi.json)// .claude/mcp.json or settings
{
"mcpServers": {
"API specification": {
"command": "npx",
"args": [
"-y",
"apidog-mcp-server@latest",
"--oas=https://api.example.com/openapi.json"
]
}
}
}With Local File:
{
"mcpServers": {
"API specification": {
"command": "npx",
"args": [
"-y",
"apidog-mcp-server@latest",
"--oas=./api-spec/openapi.json"
]
}
}
}Multiple APIs:
{
"mcpServers": {
"Main API": {
"command": "npx",
"args": ["-y", "apidog-mcp-server@latest", "--oas=https://api.main.com/openapi.json"]
},
"Auth API": {
"command": "npx",
"args": ["-y", "apidog-mcp-server@latest", "--oas=https://api.auth.com/openapi.json"]
}
}
}Create /src/api directory for all API-related code:
/src/api/
├── types.ts # Generated from OpenAPI
├── client.ts # HTTP client (axios/fetch)
├── queries/ # TanStack Query hooks
│ ├── users.ts
│ ├── posts.ts
│ └── ...
└── mutations/ # TanStack Mutation hooks
├── users.ts
├── posts.ts
└── ...Option A: Hand-Written Types (Lightweight)
// src/api/types.ts
import { z } from 'zod'
// Define schemas from OpenAPI
export const UserSchema = z.object({
id: z.string(),
name: z.string(),
email: z.string().email(),
createdAt: z.string().datetime(),
})
export type User = z.infer<typeof UserSchema>
export const CreateUserSchema = UserSchema.omit({ id: true, createdAt: true })
export type CreateUserDTO = z.infer<typeof CreateUserSchema>Option B: Code Generation (Recommended for large APIs)
# Using openapi-typescript
pnpm add -D openapi-typescript
npx openapi-typescript https://api.example.com/openapi.json -o src/api/types.ts
# Using orval
pnpm add -D orval
npx orval --input https://api.example.com/openapi.json --output src/api// src/api/client.ts
import axios from 'axios'
import createAuthRefreshInterceptor from 'axios-auth-refresh'
export const apiClient = axios.create({
baseURL: import.meta.env.VITE_API_URL,
headers: {
'Content-Type': 'application/json',
},
})
// Request interceptor - add auth token
apiClient.interceptors.request.use((config) => {
const token = localStorage.getItem('accessToken')
if (token) {
config.headers.Authorization = `Bearer ${token}`
}
return config
})
// Response interceptor - handle token refresh
const refreshAuth = async (failedRequest: any) => {
try {
const refreshToken = localStorage.getItem('refreshToken')
const response = await axios.post('/auth/refresh', { refreshToken })
const { accessToken } = response.data
localStorage.setItem('accessToken', accessToken)
failedRequest.response.config.headers.Authorization = `Bearer ${accessToken}`
return Promise.resolve()
} catch (error) {
localStorage.removeItem('accessToken')
localStorage.removeItem('refreshToken')
window.location.href = '/login'
return Promise.reject(error)
}
}
createAuthRefreshInterceptor(apiClient, refreshAuth, {
statusCodes: [401],
pauseInstanceWhileRefreshing: true,
})Feature-based query organization:
// src/api/queries/users.ts
import { queryOptions } from '@tanstack/react-query'
import { apiClient } from '../client'
import { User, UserSchema } from '../types'
// Query key factory
export const usersKeys = {
all: ['users'] as const,
lists: () => [...usersKeys.all, 'list'] as const,
list: (filters: string) => [...usersKeys.lists(), { filters }] as const,
details: () => [...usersKeys.all, 'detail'] as const,
detail: (id: string) => [...usersKeys.details(), id] as const,
}
// API functions
async function fetchUsers(): Promise<User[]> {
const response = await apiClient.get('/users')
return z.array(UserSchema).parse(response.data)
}
async function fetchUser(id: string): Promise<User> {
const response = await apiClient.get(`/users/${id}`)
return UserSchema.parse(response.data)
}
// Query options
export function usersListQueryOptions() {
return queryOptions({
queryKey: usersKeys.lists(),
queryFn: fetchUsers,
staleTime: 30_000,
})
}
export function userQueryOptions(id: string) {
return queryOptions({
queryKey: usersKeys.detail(id),
queryFn: () => fetchUser(id),
staleTime: 60_000,
})
}
// Hooks
export function useUsers() {
return useQuery(usersListQueryOptions())
}
export function useUser(id: string) {
return useQuery(userQueryOptions(id))
}Mutations:
// src/api/mutations/users.ts
import { useMutation, useQueryClient } from '@tanstack/react-query'
import { apiClient } from '../client'
import { CreateUserDTO, User, UserSchema } from '../types'
import { usersKeys } from '../queries/users'
async function createUser(data: CreateUserDTO): Promise<User> {
const response = await apiClient.post('/users', data)
return UserSchema.parse(response.data)
}
export function useCreateUser() {
const queryClient = useQueryClient()
return useMutation({
mutationFn: createUser,
onSuccess: (newUser) => {
// Add to cache
queryClient.setQueryData(usersKeys.detail(newUser.id), newUser)
// Invalidate list
queryClient.invalidateQueries({ queryKey: usersKeys.lists() })
},
})
}Always validate API responses:
import { z } from 'zod'
// Runtime validation
async function fetchUser(id: string): Promise<User> {
const response = await apiClient.get(`/users/${id}`)
try {
return UserSchema.parse(response.data)
} catch (error) {
console.error('API response validation failed:', error)
throw new Error('Invalid API response format')
}
}Or use safe parse:
const result = UserSchema.safeParse(response.data)
if (!result.success) {
console.error('Validation errors:', result.error.errors)
throw new Error('Invalid user data')
}
return result.dataGlobal error handling:
import { QueryCache } from '@tanstack/react-query'
const queryCache = new QueryCache({
onError: (error, query) => {
if (axios.isAxiosError(error)) {
if (error.response?.status === 404) {
toast.error('Resource not found')
} else if (error.response?.status === 500) {
toast.error('Server error. Please try again.')
}
}
},
})/src/api/src/api/types.ts// 1. Types (generated or hand-written)
// src/api/types.ts
export const TodoSchema = z.object({
id: z.string(),
text: z.string(),
completed: z.boolean(),
})
export type Todo = z.infer<typeof TodoSchema>
// 2. Queries
// src/api/queries/todos.ts
export const todosKeys = {
all: ['todos'] as const,
lists: () => [...todosKeys.all, 'list'] as const,
}
export function todosQueryOptions() {
return queryOptions({
queryKey: todosKeys.lists(),
queryFn: async () => {
const response = await apiClient.get('/todos')
return z.array(TodoSchema).parse(response.data)
},
})
}
// 3. Mutations
// src/api/mutations/todos.ts
export function useCreateTodo() {
const queryClient = useQueryClient()
return useMutation({
mutationFn: async (text: string) => {
const response = await apiClient.post('/todos', { text })
return TodoSchema.parse(response.data)
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: todosKeys.lists() })
},
})
}
// 4. Component
// src/features/todos/TaskList.tsx
export function TaskList() {
const { data: todos } = useQuery(todosQueryOptions())
const createTodo = useCreateTodo()
return (
<div>
{todos?.map(todo => <TodoItem key={todo.id} {...todo} />)}
<AddTodoForm onSubmit={(text) => createTodo.mutate(text)} />
</div>
)
}/src/api directory© MadAppGang, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in plugins/frontend/skills/api-integration of MadAppGang/claude-code.
Open the folder on GitHubat commit 6097ad4
API Integration 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 |
|---|---|---|---|---|---|---|
| API Integration this skillMadAppGang/claude-code | 284 | — | ~2.6k | Automated safety check: Pass | MIT | |
| OpenAPI to MCP Servermcp-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 | |
| SpikardGoldziher/spikard | 123 | — | ~799 | Automated safety check: Pass | MIT | |
| Kingdee MCP DevWaHaiLong/KingdeeMCP | 103 | — | ~853 | Automated safety check: Pass | MIT | |
| Frontmcp Developmentagentfront/frontmcp | 146 | — | ~11k | Automated safety check: Pass | Apache-2.0 |
mcp-use/mcp-use
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.
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.
Goldziher/spikard
Scaffold Spikard projects and generate code from OpenAPI, AsyncAPI, OpenRPC, GraphQL, and Protobuf schemas using the Spikard CLI or its MCP server.
WaHaiLong/KingdeeMCP
Knowledge base for the Kingdee MCP Dev Squad. An agent skill from WaHaiLong/KingdeeMCP.
agentfront/frontmcp
A skill your agent uses when building any FrontMCP server component other than a tool (for tools, use create-tool).
microsoft/GitHub-Copilot-for-Azure
Configure Azure API Management as an AI Gateway for AI models, MCP tools, and agents.
MadAppGang/claude-code
Analyzes API documentation from OpenAPI specs to provide TypeScript interfaces, request/response formats, and implementation guidance.
MadAppGang/claude-code
Content brief template and creation methodology for SEO-optimized content.
MadAppGang/claude-code
A skill your agent uses when detecting project technology stack from files/configs/directory structure, auto-loading framework-specific skills, or analyzing multi-stack fullstack projects (e.g…
MadAppGang/claude-code
On-page SEO optimization techniques including keyword density, meta tags, heading structure, and readability.
MadAppGang/claude-code
Techniques for expanding seed keywords and clustering by topic and intent.
MadAppGang/claude-code
SERP analysis techniques for intent classification, feature identification, and competitive intelligence.
Works with
Categories
A skill your agent uses when integrating Apidog + OpenAPI specifications with your React app. API Integration is an agent skill from MadAppGang/claude-code. Use when integrating Apidog + OpenAPI specifications with your React app.
API Integration fits situations like: integrating Apidog + OpenAPI specifications with your React app; setting up API clients; generating types from OpenAPI; integrating with Apidog MCP.
Run `npx skills add MadAppGang/claude-code --skill api-integration -a claude-code`. Or copy the skill folder (plugins/frontend/skills/api-integration in MadAppGang/claude-code) into .claude/skills/api-integration in your project. Claude Code loads it when a task matches its description.
Run `npx skills add MadAppGang/claude-code --skill api-integration -a codex`. Or copy the skill folder (plugins/frontend/skills/api-integration in MadAppGang/claude-code) into .agents/skills/api-integration 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 MadAppGang/claude-code --skill api-integration -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/api-integration, .gemini/skills/api-integration, .github/skills/api-integration and .opencode/skills/api-integration in your project.
Going by SKILL.md and its folder, API Integration needs the command-line tools its instructions call (pnpm and npx). Our summary lists: Node.js.
SKILL.md names 2 domains. In commands or code: api.main.com and api.auth.com; the agent is likely to contact these when it follows the instructions. 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.
API Integration is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.6k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with API Integration: OpenAPI to MCP Server (mcp-use/mcp-use, 11k stars), API Endpoint Contract (trycompai/comp, 2k stars), Spikard (Goldziher/spikard, 123 stars) and Kingdee MCP Dev (WaHaiLong/KingdeeMCP, 103 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
MadAppGang (a GitHub organization) maintains it in MadAppGang/claude-code, which has 284 GitHub stars. The repository holds 69 skills in this directory. The repository was last updated on March 15, 2026.
Source: MadAppGang/claude-code on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.