blobfish-mcp
Blobfish MCP
라지 api. Zero 구성. Claude에서 즉시 사용 가능.
Blobfish는 모든 REST API를 Claude가 호출할 수 있는 도구로 바꿔주는 MCP 서버입니다 — 어댑터를 수동으로 작성할 필요 없이, 런타임에 즉시 동작합니다.
OpenAPI/Swagger URL이나 Postman 컬렉션을 지정하세요. Blobfish는 모든 엔드포인트를 파싱하여 이름, 설명, 입력 스키마를 갖춘 타입 정의 MCP 도구를 생성합니다. Claude는 인증·파라미터·라이브 상태의 모든 엔드포인트를 즉시 발견하고, 이해하고, 호출할 수 있습니다.
데모
"도메인 이름만 가리켰습니다. 스펙을 스스로 찾아 20개 도구를 로드했고, Claude가 10초 만에 라이브 API를 조회했습니다."

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.jsonNode.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개의 메타 도구로 시작합니다:
도구 | 설명 |
| 사전 구성된 모든 API 나열 — 이름만으로 즉시 로드 |
| 도메인만으로 스펙 자동 탐색 — 공통 경로 25개를 프로브 |
| URL, 레지스트리 이름, 로컬 파일로 로드. |
| 로드된 API의 자격 증명을 대화 중에 갱신 |
| 모든 엔드포인트 자동 페이지네이션 — |
|
|
| 저장된 모든 워크플로와 각 단계 수 목록 |
|
|
| 최근 N개 요청의 정확한 URL/본문 확인 — 400 오류 디버깅에 유용 |
| 어떤 API가 요청 제한 중이고 언제 초기화되는지 표시 |
| 캐시 적중률, 크기, 항목 수 |
| 캐시된 응답 지우기 |
| 로드된 API에 핑을 보내 상태와 응답 시간 확인 |
| 로드된 API의 요약을 역량 그룹별로 설명 |
| 로드된 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 API |
|
| CoinGecko API | (없음 — 공개) |
| Datadog API |
|
| Discord API |
|
| GitHub REST API |
|
| HubSpot CRM API |
|
| Jira Cloud API |
|
| Linear API |
|
| Notion API |
|
| OpenAI API |
|
| Open-Meteo Weather API | (없음 — 공개) |
| OpenWeatherMap API |
|
| PagerDuty API |
|
| Swagger Petstore | (없음 — 데모) |
| Resend API |
|
| Shopify Admin API |
|
| Slack Web API |
|
| Spotify Web API |
|
| Stripe API |
|
| Twilio API |
|
| Vercel API |
|
인증
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에 대한 전역 Bearer 토큰 |
|
|
|
|
| 요청 타임아웃(ms) |
|
| 5xx 오류 시 재시도 수 |
|
| 응답 캐시 TTL(초) |
| — | 로그 파일 경로 또는 |
|
|
|
| — |
|
|
|
|
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/sdkswagger-parser —
@apidevtools/swagger-parserNode.js 18+ 내장
fetchNode.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:
This server cannot be deployed
Maintenance
Related MCP Connectors
Any REST/SOAP/GraphQL/OData/SQL API as MCP tools for Claude & ChatGPT. 352 connectors: SAP, ERP.
Turn any task into the right API calls: discover, evaluate, and integrate public APIs.
Discover, compare, route, and execute machine-accessible capabilities for AI agents.
Connect AI agents to 1000+ apps with managed authentication and tool-calling.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceProvides AI assistants with access to OpenAPI specifications, enabling API discovery, schema retrieval, and direct API execution with support for OAuth 2.0 and other authentication methods.5 npm1MIT
- AlicenseNot gradedqualityAmaintenanceEnables 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 npmMIT
- AlicenseNot gradedqualityAmaintenanceBridges any OpenAPI 3.x REST API to Claude Code by automatically generating one tool per endpoint from your spec, with full argument validation and auth support.9 npmMIT
- AlicenseBqualityCmaintenanceEnables 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.1223 npmMIT