Skip to main content
Glama
swayyaam

blobfish-mcp

by swayyaam

Blobfish MCP

npm version CI license node

라지 api. Zero 구성. Claude에서 즉시 사용 가능.

Blobfish는 모든 REST API를 Claude가 호출할 수 있는 도구로 바꿔주는 MCP 서버입니다 — 어댑터를 수동으로 작성할 필요 없이, 런타임에 즉시 동작합니다.

OpenAPI/Swagger URL이나 Postman 컬렉션을 지정하세요. Blobfish는 모든 엔드포인트를 파싱하여 이름, 설명, 입력 스키마를 갖춘 타입 정의 MCP 도구를 생성합니다. Claude는 인증·파라미터·라이브 상태의 모든 엔드포인트를 즉시 발견하고, 이해하고, 호출할 수 있습니다.


데모

"도메인 이름만 가리켰습니다. 스펙을 스스로 찾아 20개 도구를 로드했고, Claude가 10초 만에 라이브 API를 조회했습니다."

Blobfish demo


Related MCP server: mcp-openapi

1.3.0의 새 기능

OAuth 2.0 client_credentials — OAuth 인증이 필요한 API(Salesforce, HubSpot OAuth 앱, Auth0로 보호된 API, 대부분의 엔터프라이즈 게이트웨이)가 이제 토큰 관리 없이 동작합니다. Blobfish에 token_url, client_id, client_secret을 주면 bearer 토큰을 가져와 캐시하고, 만료 60초 전에 갱신하며, 401이 반환되면 새 토큰으로 한 번 더 재시도합니다. 이 모든 과정은 Claude에게 보이지 않습니다.

{ "type": "oauth2", "token_url": "https://login.example.com/oauth/token", "client_id": "${MY_CLIENT_ID}", "client_secret": "${MY_CLIENT_SECRET}" }

환경 프로필 — npx blobfish-mcp --profile staging을 실행하거나(또는 BLOBFISH_PROFILE=staging 설정) blobfish.staging.json 파일이 있으면 로드하고, 각 API 항목에서 auth_profiles.staging 자격 증명을 선택합니다. 같은 API, 다른 키, 플래그 하나로 해결.

자동 .env 로드 — 레지스트리 API의 키가 .env 파일에 있으면 시작 시 자동으로 로드됩니다. blobfish.json이나 load_api 호출이 필요 없습니다.

STRIPE_SECRET_KEY=sk-live-...   →  Stripe tools appear in Claude on startup
GITHUB_TOKEN=ghp_...            →  GitHub tools appear in Claude on startup
OPENAI_API_KEY=sk-...           →  OpenAI tools appear in Claude on startup

사전 빌드된 21개 레지스트리 항목 모두에 적용됩니다. 비활성화하려면 BLOBFISH_AUTO_LOAD=false도 설정하세요.

도구 주석 — 이제 생성되는 모든 도구는 HTTP 메서드에 따라 readOnlyHint, destructiveHint, idempotentHint을 선언합니다(GET = 활기전용, DELET = 파적적 등). Claude와 호환되는 클라이언트는 이 hint를 사용하하여 호출 전에 확인할지 잘정합니다.

워크프로 조건 연산자 — run_if는 이제 ==, != 외에 >, <, >=, <=도 지원합니다.


설치

# Run directly without installing
npx blobfish-mcp https://petstore.swagger.io/v2/swagger.json

# Configure Claude Desktop (no clone needed)
npx blobfish-mcp --setup

# Or install globally
npm install -g blobfish-mcp
blobfish https://petstore.swagger.io/v2/swagger.json

Node.js 18+ 버전 이상이 필요합니다.


Claude Code 연결

가장 빠른 방법 — clone 없이:

npx blobfish-mcp --setup

또는 저장소를 클론한 경우:

npm install
npm run setup   # auto-detects config path and writes the entry

그후 Claude Desktop에서 MCP 구성을 리로드하세요: Help → Reload MCP Configuration.

수동 설정

Claude Desktop 설정에 추가합니다 (Windows에서는 %APPDATA%\Claude\claude_desktop_config.json, Mac에서는 ~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "blobfish": {
      "command": "node",
      "args": ["/path/to/blobfish-mcp/server.js"],
      "env": {
        "API_KEY": "your-bearer-token-if-needed"
      }
    }
  }
}

호환 클라이언트

Any는 MCP 호환 클라이언트와 동작합니다:

  • Claude Desktop — 기본 대상이며 npx blobfish-mcp --setup으로 구성합니다

  • Cursor — 같은 설정 형식으로 .cursor/mcp.json에 추가

  • Windsurf — ~/.кuniform/windsurf/mcp_config.json에 추가

  • Continue.dev — .continue/config.json의 mcpServers 아래에 추가

  • Cline / Roo Cline — Cline의 MCP 설정 패널에서 추가

  • Zed — so Zed's MCP settings to...

  • Smithery — smithery.yaml로 한 번의 클릭 설치

stdio 대신 HTTP/SSE를 사용하는 클라이언트는 다음과 같이 시작하세요:

blobfish --http   # Streamable HTTP on http://localhost:3000/mcp
blobfish --sse    # SSE on http://localhost:3000/sse
BLOBFISH_PORT=8080 blobfish --http   # custom port

동작 방식

Blobfish는 Claude가 항상 호출할 수 있는 span 17개의 메타 도구로 시작합니다:

도구

설명

list_reg

사전 구성된 모든 API 나열 — 이름만으로 즉시 로드

discover_api

도메인만으로 스펙 자동 탐색 — 공통 경로 25개를 프로브

load_pi

URL, 레지스트리 이름, 로컬 파일로 로드. include_tags, (tags, shallow, mock) 지원

set_api_auth

로드된 API의 자격 증명을 대화 중에 갱신

fetch_all

모든 엔드포인트 자동 페이지네이션 — Link 헤더, cursor, offset

save_workflow

run_workflow(name: "...")로 다시 실행할 수 있도록 이름으로 워크플로 저장

list_workflows

저장된 모든 워크플로와 각 단계 수 목록

run_workflow

{{ template }} 구문, foreach, run_if를 지원하는 다단계 파이프라인

get_last_request_log

최근 N개 요청의 정확한 URL/본문 확인 — 400 오류 디버깅에 유용

rate_limit_status

어떤 API가 요청 제한 중이고 언제 초기화되는지 표시

cache_stats

캐시 적중률, 크기, 항목 수

clear_cache

캐시된 응답 지우기

test_connection

로드된 API에 핑을 보내 상태와 응답 시간 확인

api_summary

로드된 API의 요약을 역량 그룹별로 설명

list_apis

로드된 API와 도구 수 목록

unload_api

로드된 API와 그 모든 도구 제거

Claude가 load_api 또는 discover_api를 호출하면 Blobfish는 스펙을 파싱하고 tools/list_changed 알림을 보내며 — 새 도구가 즉시 나타납니다.

워크플로우

여러. can be applied to a single operation. Use the {{ steps.id.field }} template syntax to reference earlier steps results.

인라인 실행:

run_workflow(steps: [
  { id: "user",  tool: "jph_get_users_id",       args: { id: "1" } },
  { id: "posts", tool: "jph_get_posts",           args: { userId: "{{ steps.user.data.id }}" } },
  { id: "first_comments", tool: "jph_get_posts_id_comments",
    run_if: "{{ steps.posts.data.length }} != 0",
    args:   { id: "{{ steps.posts.data.0.id }}" } }
])

저장 후 다시 실행:

save_workflow(name: "user-posts", steps: [...])
run_workflow(name: "user-posts", input: { userId: "42" })
list_workflows()

blobfish.json에서 사전 로드:

{
  "workflows": {
    "crypto-report": {
      "description": "BTC/ETH prices + trending coins",
      "steps": [
        { "id": "price",    "tool": "coingecko_get_simple_price",    "args": { "ids": "{{ input.coins }}", "vs_currencies": "usd" } },
        { "id": "trending", "tool": "coingecko_get_search_trending", "args": {} }
      ]
    }
  }
}

단계별 옵션: foreach (배열 반복), run_if (조건부 건너뛰기), on_error: "continue" (실패해도 중단하지 않음)

바로 사용 가능한 예제는 workflows/ 폴더에 있습니다.


blobfish.json 설정

시작과 동시에 로드할 API를 사전 구성합니다. 프로젝트 루트에 blobfish.md 만들기:

{
  "timeout": 30000,
  "retries": 3,
  "apis": [
    {
      "url": "https://petstore.swagger.io/v2/swagger.json",
      "name": "petstore"
    },
    {
      "url": "https://api.example.com/openapi.json",
      "name": "myapi",
      "auth": {
        "type": "bearer",
        "key": "${MY_API_TOKEN}"
      },
      "timeout": 10000
    },
    {
      "url": "./local-spec.json",
      "name": "localapi",
      "mock": true
    }
  ]
}

"${MY_API_TOKEN}"와 같은 값은 시작 시 환경 변수에서 이름으로 치환됩니다.


레지스트리

무료로 구동되는 21개의 사전 구축 레지스트리 항목 — spec URL이나 인증 설정이 필요 없습니다.

자동 .env 로드(1.2.0 기본값): .env 파일에 API키를 넣으면 도구가 자동으로 표시됩니다.

자동 .env 미사용: Claude에 이름으로 로드하도록 요청하세요:

load_api(spec_url: "stripe")
load_api(spec_url: "github")

또는 list_registry로 탐색할 수 있습니다.

| Name | API | Required Environment Variable(s) | | anthropic | Anthropic API | ANTHROPIC_API_KEY | | coingecko | CoinGecko API | (none — public) | | covverge | Coin... | Wait, I'll write the table exactly.

Name

API

Required Environment Variables(s)

anthropic

Anthropic API

ANTHROPIC_API_KEY

coingecko

CoinGecko API

(없음 — 공개)

datadog

Datadog API

DATADOG_API_KEY

discord

Discord API

DISCORD_BOT_TOKEN

github

GitHub REST API

GITHUB_TOKEN

hubspot

HubSpot CRM API

HUBSPOT_ACCESS_TOKEN

jira

Jira Cloud API

JIRA_EMAIL, JIRA_API_TOKEN

linear

Linear API

LINEAR_API_KEY

notion

Notion API

NOTION_TOKEN

openai

OpenAI API

OPENAI_API_KEY

openmeteo

Open-Meteo Weather API

(없음 — 공개)

openweathermap

OpenWeatherMap API

OPENWEATHERMAP_API_KEY

pagerduty

PagerDuty API

PAGERDUTY_API_KEY

petstore

Swagger Petstore

(없음 — 데모)

resend

Resend API

RESEND_API_KEY

shopify

Shopify Admin API

SHOPIFY_ACCESS_TOKEN

slack

Slack Web API

SLACK_BOT_TOKEN

spotify

Spotify Web API

SPOTIFY_ACCESS_TOKEN

stripe

Stripe API

STRIPE_SECRET_KEY

twilio

Twilio API

TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN

vercel

Vercel API

VERCEL_TOKEN


인증

blobfish.json 또는 load_api를 통한 API별 인증

{ "type": "bearer", "key": "sk-..." }

{ "type": "apikey", "key": "abc123", "header": "X-Api-Key" }

{ "type": "basic", "username": "user", "password": "pass" }

{ "type": "oauth2", "token_url": "https://login.example.com/oauth/token", "client_id": "...", "client_secret": "...", "scope": "read write" }

OAuth 2.0 (client_credentials)

oauth2의 경우 Blobfish는 token_url에서 클라이언트 자격 증명을 bearer token으로 교환하고, 메모리에 캐시한 뒤, 만료 60초 전에 갱신하며, API가 401을 반환하면 새 토큰으로 한 번 더 재시도합니다. 선택 필드:

  • scope — 공백으로 구분된 scope 목록

  • audience — 일부 제공자(예: Auth0)에서 필요

  • client_auth — "body" (기본값, 양식 본문에 자격 증명) 또는 "basic" (HTTP Basic 헤더), 제공자가 요구하는 방식에 맞춰 선택

토큰은 디스크에 저장되지 않으며 로그에 기록되지 않습니다.

환경 프로필

auth_profiles를 사용하면 모든 API 항목에서 스테이징과 운영 키를 함께 보관할 수 있습니다:

{
  "url": "https://api.example.com/openapi.json",
  "name": "myapi",
  "auth": { "type": "bearer", "key": "${PROD_API_TOKEN}" },
  "auth_profiles": {
    "staging": { "type": "bearer", "key": "${STAGING_API_TOKEN}" }
  }
}

그다음 --profile staging(또는 BLOBFISH_PROFILE=staging). blobfish.staging.json 파일이 존재하면 blobfish.json을 완전히 대신 로드됩니다. 프로필을 지정하지 않으면 auth를 그대로 사용합니다.

전역 대체

모든 API에 Bearer 토큰 인증을 적용하려면 환경 변수나 .env 파일에 API_KEY를 설정하세요.


페이지네이션

페이지네이션 엔드포인트의 모든 페이지를 자동으로 가져오려면 fetch_all을 사용하세요:

fetch_all(tool_name: "petstore_get_pets", args: { status: "available" }, max_pages: 5)

Blobfish는 다음과 같은 규칙을 자동으로 감지하여 따릅니다:

  • Link: <url>; rel="next" 헤더 (GitHub, Stripe 스타일)

  • { next_cursor, cursor, after, next_page_token } 필드

  • { has_more: true } + offset/limit

  • { total, offset, limit } 패턴


환경 변수

Variable

Default

Description

API_KEY

—

모든 API에 대한 전역 Bearer 토큰

BLOBFISH_AUTO_LOAD

true

false로 설정하면 .env에서 레지스트리 API 자동 로드 비활성화

BLOBFISH_TIMEOUT

30000

요청 타임아웃(ms)

BLOBFISH_RETRIES

3

5xx 오류 시 재시도 수

BLOBFISH_CACHE_TTL

60

응답 캐시 TTL(초)

BLOBFISH_LOG

—

로그 파일 경로 또는 true면 ./blobfish.log

BLOBFISH_PORT

3000

--http / --sse 전송 시 포트

BLOBFISH_PROFILE

—

--profile과 동일한 환경 프로필(예: staging)

BLOBFISH_ALLOW_LOCAL

false

true로 설정하면 로컬 파일 스펙 로드 허용(개발 전용)


Mock mode

Mock모드로 API를 로드하면 실제 HTTP 호출 없이 예제 응답을 얻을 수 있습니다. API 키 없이 테스트하거나 데모를 보여줄 때 유용합니다:

load_api(spec_url: "https://...", mock: true)

No, I'm messing up. I'm going to type carefully in the final answer, word by word, checking each. I'll do that now in my head, ignoring previous drafts.

The final should be:

[line] 응답은 OpenAPI 스펙의 example 필드에서 생성됩니다.

[empty]


[empty]

지원 형식

[empty]

  • OpenAPI 3.x (JSON + YAML)

  • Swagger 2.0 (JSON + YAML)

  • Postman Collections v2.1

  • 로컬 파일 (./path/to/spec.json) [empty]


[empty]

문제 해결

[empty] Blobfish가 Claude Desktop에 나타나지 않음 [empty]

  • 창만 닫지 말고 Claude Desktop을 완전히 종료하세요 (트레이 아이콘 → 종료)

  • Windows Store 설치의 경우 구성 파일은 %LOCALAPPDATA%\Packages\Claude_*\LocalCache\Roaming\Claude\claude_desktop_config.json에 있습니다 — npm run setup을 실행하면 올바른 경로를 자동으로 찾을 수 있습니다

  • node가 PATH에 있는지 확인하세요: 터미널을 열고 node --version을 실행해 보세요. 실패하면 구성의 command 필드에 전체 경로(C:/Program Files/nodejs/node.exe)를 사용하세요 [empty] 스펙 로딩 시 SSRF blocked 오류 발생 [empty]

  • 스펙 URL이 사설/내부 IP로 해석됩니다. 이는 보안을 위한 의도된 동작입니다.

  • 개발 중 로컬 스펙을 로딩하는 경우: .env에 BLOBFISH_ALLOW_LOCAL=true를 설정하세요. [empty] Spec generates N tools (max 500) 오류 [empty]

  • include_tags로 필터링하세요: load_api(spec_url: "...", include_tags: ["repos", "issues"])

  • 사용 가능한 태그를 확인하려면 먼저 api_summary를 실행하세요 [empty] 도구는 나타나지만 호출은 오류를 반환합니다 [empty]

  • 실패한 호출 후 get_last_request_log를 호출하세요 — Claude가 전송된 정확한 URL과 본문을 확인하고 스스로 수정할 수 있습니다

  • rate_limit_status를 확인하세요 — 요청 제한이 초기화되기를 기다려야 할 수도 있습니다 [empty]


[empty]

빌드에 사용된 것

[empty]

  • MCP SDK — @modelcontextprotocol/sdk

  • swagger-parser — @apidevtools/swagger-parser

  • Node.js 18+ 내장 fetch

  • Node.js 20.6+ 내장 .env 로딩 (--env-file)

Now, verify: "사설/내부" - private (사설) is fine. Also "로 해석됩니다" is good. Alternatively "로 확인됩니다" - "resolves to a private/internal IP" - "가 사설/내부 IP로 확인됩니다" or "매핑됩니다". I'll use "확인됩니다".

Also "이 동작은 보안상 의도된 것입니다." Good.

"Through the include_tags로 필터링하세요" - better: "include_tags를 사용하여 필터링하세요: ..." Yes.

"도구는 나타나지만 호출 시 오류가 반환됩니다" matches "Tools appear but calls return errors". Good.

"빌드에 사용된 것" - maybe "함께 빌드된" or "만드는 데 사용한 도구". "Built with" - better "사용된 기술" or "빌드 관련". I'll go with "빌드에 사용된 것".

Another check: "Node.js 18+ native fetch" - "native" = "내장" or "네이티브". I'll use "내장". "Node.js 18+ 내장 fetch".

Also correct: "BLOBFISH_ALLOW_LOCAL" - careful spell: B L O B F I S H underscore A L L O W underscore L O C A L. Good.

"%LOCALAPPDATA%\Packages\Claude_*\LocalCache\Roaming\Claude\claude_desktop_config.json" - keep exactly. Note there's a * inside the path Claude_* - that's a wildcard, keep as is.

"Windows Store install" - "Windows Store 설치" - Should "Store 설치" maybe "스토어"? "installation on Windows Store" = "Windows Store에서 설치한 경우". I'll use "Windows Store 설치 환경에서는". It's fine.

Also the user's phrase "tray icon → Quit" - "트레이 아이콘 → 종료". Good.

Now: Should I translate "Quit" to "종료" or keep "Quit"? I decided "종료". Fine.

One more consideration: "the config goes into..." - "구성 파일" is "configuration file". In Claude's spec "claude_desktop_config.json" is a config file. Good.

"Make sure you fully quit Claude Desktop (tray icon → Quit)" based on instructions "Be sure to fully exit" - I translated.

Now, the overall formatting: The "message Separators" - In the source, before "## Trouble- shoting", there's a line "***" after the "## 질 support formats" section? Let me look at the input:

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to discover, search, and call any REST API described by an OpenAPI or Swagger document. Supports multiple API endpoints with authentication and parameter handling.
    5 npm
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Enables Claude Desktop to interact with enterprise REST APIs such as Jira, Zoho CRM, Salesforce, SharePoint, Procore, HxGN EAM, and Primavera P6 using OpenAPI/Swagger definitions, with support for various authentication workflows.
    12
    23 npm
    MIT