Skip to main content
Glama
koseha

API MCP Server

by koseha
README.md
# API MCP 서버

Swagger/OpenAPI 스펙 기반의 Model Context Protocol (MCP) 서버입니다. OpenAPI 문서를 통해 API 목록과 상세 정보를 조회할 수 있는 도구를 제공합니다.

## 기능

### 도구 (Tools)

- **`getApiList`** - API 목록 조회

  - OpenAPI 스펙에서 모든 API 엔드포인트 목록을 조회합니다.
  - 반환 형식: 각 경로별 HTTP 메서드와 `tags`, `operationId`, `summary` 정보

- **`getApiDetail`** - API 상세 조회
  - 특정 API의 상세 정보를 조회합니다.
  - 파라미터: `requestUrl` (string), `httpMethod` (get|post|put|delete|patch)
  - 반환 형식: `parameters`, `requestBody`, `responses` 정보

### 리소스 (Resources)

- **`greeting://{name}`** - 동적 인사말 생성 리소스

## 설치

### NPM 패키지로 설치

```bash
npm install @koseha/api-mcp
```

또는

```bash
npm install @koseha/api-mcp@latest
```

## 사용 방법

### 방법 1: Cursor IDE 에서 사용

Cursor 설정 파일에 추가:

```
{
  "mcpServers": {
    "api-mcp": {
      "command": "node",
      "args": ["./node_modules/@koseha/api-mcp/dist/index.js"],
      "env": {
        "OPENAPI_URL": <your swagger.json url ex.'https://petstore3.swagger.io/api/v3/openapi.json'>
      }
    }
  }
}

```

### 방법 2: Claude Desktop에서 사용

Claude Desktop 설정 파일에 추가:

**macOS:**

```
~/Library/Application Support/Claude/claude_desktop_config.json
```

**Windows:**

```
%APPDATA%\Claude\claude_desktop_config.json
```

설정 예시:

```json
{
  "mcpServers": {
    "api-mcp": {
      "command": "npx",
      "args": ["-y", "@koseha/api-mcp"],
      "env": {
        "OPENAPI_URL": "https://api.example.com/openapi.json"
      }
    }
  }
}
```

또는 로컬 경로 사용:

```json
{
  "mcpServers": {
    "api-mcp": {
      "command": "node",
      "args": ["/path/to/api-mcp/dist/index.js"],
      "env": {
        "OPENAPI_URL": "https://api.example.com/openapi.json"
      }
    }
  }
}
```

### 방법 3: Node.js 프로젝트에서 직접 사용

```javascript
import { spawn } from "child_process";

const mcpServer = spawn("npx", ["-y", "@koseha/api-mcp"], {
  stdio: ["pipe", "pipe", "pipe"],
});

// JSON-RPC 요청 보내기
function sendRequest(method, params) {
  const request = {
    jsonrpc: "2.0",
    id: Date.now(),
    method,
    params: params || {},
  };
  mcpServer.stdin?.write(JSON.stringify(request) + "\n");
}

// API 목록 조회
sendRequest("tools/call", {
  name: "getApiList",
  arguments: {},
});

// API 상세 조회
sendRequest("tools/call", {
  name: "getApiDetail",
  arguments: {
    requestUrl: "/pet/{petId}/uploadImage",
    httpMethod: "post",
  },
});
```

### 방법 4: 로컬 개발 중 사용

#### npm link 사용

현재 프로젝트에서:

```bash
npm link
```

다른 프로젝트에서:

```bash
npm link @koseha/api-mcp
```

#### 상대 경로 사용

다른 프로젝트의 `package.json`에 추가:

```json
{
  "dependencies": {
    "@koseha/api-mcp": "file:../api-mcp"
  }
}
```

## 개발

### 사전 요구사항

- Node.js 18 이상
- npm 또는 yarn

### 설치

```bash
npm install
```

### 빌드

```bash
npm run build
```

### 실행

```bash
npm start
```

또는 개발 모드:

```bash
npm run dev
```

## 프로젝트 구조

```
api-mcp/
├── src/
│   ├── index.ts              # MCP 서버 엔트리포인트
│   ├── server.ts             # 서버 생성 로직
│   ├── tools/                # 도구 모듈
│   │   ├── index.ts
│   │   ├── getApiList.tool.ts    # API 목록 조회 도구
│   │   └── getApiDetail.tool.ts  # API 상세 조회 도구
│   ├── resources/            # 리소스 모듈
│   │   ├── index.ts
│   │   └── greeting.resource.ts
│   └── swagger/              # Swagger 로더 및 변환기
│       ├── swaggerLoader.ts
│       ├── apiTransformer.ts
│       ├── schemaResolver.ts
│       └── types.ts
├── dist/                     # 빌드된 파일
├── openapi.json             # OpenAPI 스펙 파일
├── package.json
├── tsconfig.json
└── README.md
```

## OpenAPI 스펙 설정

`OPENAPI_URL` 환경 변수를 통해 OpenAPI 문서의 URL을 설정해야 합니다. 서버 시작 시 이 환경 변수가 설정되지 않으면 서버가 시작되지 않습니다.

예시:

```bash
export OPENAPI_URL=https://api.example.com/openapi.json
```

## 의존성

### 프로덕션 의존성

- `@modelcontextprotocol/sdk`: MCP SDK (^1.25.1)
- `zod`: 스키마 검증 (^4.2.1)

### 개발 의존성

- `typescript`: 타입스크립트 컴파일러 (^5.9.3)
- `@types/node`: Node.js 타입 정의 (^25.0.3)
- `ts-node`: TypeScript 실행 도구 (^10.9.2)

## 버전

현재 버전: **0.0.10**

## History

| 버전   | 날짜           | 변경사항                                                                                                                                                |
| ------ | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 0.0.10 | KST 2025.12.31 | - OpenAPI 문서를 HTTP 요청으로 로드하도록 변경 <br/> - OPENAPI_URL 환경 변수 필수 검증 추가 <br/> - API 상세 조회 로직 리팩토링 (apiTransformer 모듈화) |
| 0.0.7  | KST 2025.12.31 | - tool 요청 시 openapi.json 문서의 특정 부분만 추출하여 사용하도록 변경 <br/> >> 전체 openapi.json 문서 내용이 사용되지 않도록 함. token 절약           |

## 라이선스

ISC

## 참고 자료

- [MCP 공식 문서](https://modelcontextprotocol.io)
- [MCP SDK GitHub](https://github.com/modelcontextprotocol/typescript-sdk)
- [OpenAPI 스펙](https://swagger.io/specification/)

## 기여

이슈나 풀 리퀘스트는 [GitHub 저장소](https://github.com/koseha/api-mcp)에서 환영합니다.

Maintenance

ActivityInactive
ResponsivenessNo issues