MCP 서버 (claude.ai / Claude Desktop / Code / Cursor) - Entity Enricher 문서

MCP 서버 (Claude Desktop / Code / Cursor)

Entity Enricher는 /api/mcp에 임베디드 Model Context Protocol 서버를 제공합니다 — 스키마 목록 조회, 엔터티 강화, 결과 검토, 분류 경고 해결을 모두 하나의 Claude 채팅 안에서 처리합니다. 워크플로 편집기가 필요 없습니다.

이미 n8n + Make가 있는데 왜 MCP일까요?

형태가 다르면 사용 사례도 다릅니다. n8nMake 커넥터는 워크플로우 자동화를 위해 API를 감쌉니다: 트리거, 예약 실행, 다단계 파이프라인, 지속 상태. MCP는 대화형 채팅을 위해 감쌉니다: 즉석 질문, 탐색적 보강, 후속 명확화. 워크플로우는 배치 형태이고 채팅은 대화 형태입니다 — 표면이 다르고 UX도 다릅니다.

MCP만이 잠금 해제하는 킬러 기능: 대화형 분류 재개. 사전 점검 분류기가 엔터티를 거부하면(예: Planet 스키마에 대해 "Titan"을 보강하도록 요청했지만 Titan은 위성인 경우), n8n/Make는 비대화형이므로 자동으로 취소해야 합니다. MCP는 경고를 Claude에 표시하고, Claude가 확인을 요청하며, "예"라고 하면 분류기 없이 도구가 다시 실행됩니다. 파이프라인 중간 실패도, 처음부터 다시 실행할 필요도 없습니다.

빠른 시작

옵션 1 — OAuth(권장)

claude.ai, Claude Code, Cursor, 그리고 표준 OAuth 흐름을 지원하는 모든 MCP 클라이언트에 사용합니다. 생성하거나 붙여넣을 API 키가 없으며, 클라이언트가 인증 서버를 자동으로 검색합니다.

  1. Entity Enricher를 커넥터로 추가하세요(claude.ai에서: Settings → Connectors → Add custom connector, 또는 디렉터리에서 선택). URL은 https://entityenricher.ai/api/mcp/입니다.
  2. 브라우저에서 Entity Enricher 동의 화면이 열립니다. 필요하면 로그인한 후 Authorize를 클릭하세요. 이 연결은 사용자 본인의 역할로 사용자를 대신하여 작동합니다.
  3. API Keys → Connected Apps에서 언제든지 연결을 관리하거나 해지할 수 있으며, 해지하면 즉시 접근이 차단됩니다.

옵션 2 — API 키(정적 JSON 구성)

대화형 로그인이 아니라 JSON 파일로 구성하는 클라이언트(Claude Desktop, Continue, Zed)에 사용합니다.

  1. 1. API 키 만들기
    Entity Enricher 웹 UI에서: 설정 → API 키 → 새 조직 액세스 키. 역할을 선택하세요(주로 읽기용은 operator, 스키마 생성/편집은 editor, 전체 제어는 owner). ent_… 값을 복사하세요. 한 번만 표시됩니다.
  2. 2. MCP 클라이언트에 등록하기

    Claude Desktop의 경우 ~/Library/Application Support/Claude/claude_desktop_config.json(macOS) 또는 %APPDATA%\Claude\claude_desktop_config.json(Windows)을 편집하세요:

    {
      "mcpServers": {
        "entityenricher": {
          "url": "https://entityenricher.ai/api/mcp/",
          "headers": { "X-API-Key": "ent_your_key_here" }
        }
      }
    }

    Claude Desktop을 다시 시작하세요. 동일한 스니펫이 Claude Code, Cursor, Continue, Zed 등 모든 MCP 호환 클라이언트에서 작동합니다.

사용해 보기

새 채팅에서: "내 Entity Enricher 스키마를 나열한 다음, Claude Sonnet을 사용하여 제약회사 스키마에 대해 Sanofi를 강화하세요." Claude는 도구를 자동으로 발견하고 올바른 도구를 선택하며, 모델과 스키마 선택을 확인하도록 요청한 후 결과를 인라인으로 스트리밍합니다.

도구

29개의 도구가 전체 보강 및 스키마 작성 영역을 다룹니다. 동작은 이들이 래핑하는 REST 엔드포인트와 동일합니다(동일한 검증, 청구, 요금제 제한) — 웹 UI가 수정되면 MCP에도 함께 반영됩니다. 장시간 실행 작업(배치 보강, 샘플 생성, 벤치마크 실행)은 비동기입니다: 시작 도구가 job_id를 반환하고, Claude가 get_job_status를 폴링하며, 작업이 완료되면 레코드에서 저장된 출력을 가져옵니다.

범주도구설명
검색list_models사용 가능한 LLM 모델과 요금제의 profile_limits를 나열하여 Claude가 HTTP 402에 도달하기 전에 스스로 속도를 조절하도록 합니다.
스키마list_schemas조직에 저장된 JSON 스키마를 고정된 항목 순으로 나열합니다.
스키마get_schemaUUID로 스키마의 전체 콘텐츠를 가져옵니다.
스키마generate_sample엔티티 유형 설명에서 사실적인 샘플 엔티티를 생성합니다 — 스키마 생성 전의 자연스러운 첫 단계입니다. 첨부 파일이 있으면 대화형 플래너가 설명 요청 질문과 함께 일시 중지될 수 있습니다.
스키마create_schema_from_sampleLLM을 통해 샘플 엔티티 딕셔너리에서 JSON 스키마를 생성하며, 선택적으로 업로드된 원본 문서(attachment_ids)를 기반으로 합니다. 결과는 자동 저장됩니다.
스키마edit_schema기존 스키마를 자연어로 수정합니다. 새 콘텐츠와 5개의 후속 제안을 반환합니다.
스키마save_schemaClaude가 직접 작성한 스키마를 저장합니다 — LLM 호출 없음, 비용 없음, 서버 측에서 검증됩니다.
스키마update_schemaLLM 호출 없이 저장된 스키마의 이름 변경, 콘텐츠 교체, 재태그 또는 고정을 수행합니다.
스키마delete_schemaUUID로 저장된 스키마를 소프트 삭제합니다.
보강enrich_entity선택적 자동 융합이 포함된 다중 모델 강화입니다. 선택적 attachment_ids 목록을 허용합니다. 분류 불일치는 오류가 아닌 응답을 반환하므로 Claude가 사용자에게 확인 후 재시도를 요청할 수 있습니다.
보강start_batch_enrichment최대 100개의 엔티티를 비동기로 보강합니다 — 엔티티별 전체 파이프라인과 자동 융합. job_id를 반환하며, 결과는 레코드에 저장됩니다.
보강fetch_entities외부 REST API에서 서버 측으로 엔티티의 JSON 배열을 가져옵니다(bearer / api_key / basic 인증) — 배치 보강과 함께 사용됩니다.
보강retry_expertises레코드에서 실패한 전문 분야만 다시 실행하고 복구된 값을 다시 병합합니다 — 이미 성공한 부분에 대한 재결제는 없습니다.
보강merge_records2개 이상의 기존 레코드를 하나의 융합 결과로 병합합니다 — 규칙 기반 또는 LLM 중재 모델 사용.
작업get_job_status모든 비동기 작업(배치, 샘플 생성, 벤치마크 실행)을 폴링합니다: 진행 카운터, 최종 요약, 대기 중인 설명 요청 질문.
작업cancel_job대기 중, 실행 중 또는 일시 중지된 작업을 취소합니다.
작업answer_job_question일시 중지된 작업의 설명 요청 질문에 답하고 작업을 재개합니다 — generate_sample의 대화형 부분입니다.
벤치마크list_benchmark_scenarios저장된 벤치마크 시나리오(재사용 가능한 보강 테스트)를 나열합니다.
벤치마크get_benchmark_scenario모델별 채점 결과(품질 / 비용 / 속도)를 포함한 단일 시나리오입니다.
벤치마크create_benchmark_scenario시나리오를 생성합니다: 스키마 + 고정 엔티티 + 전략 + 채점 심사자. 소유자 역할과 벤치마크가 포함된 요금제가 필요합니다.
벤치마크update_benchmark_scenario시나리오의 테스트 정의 또는 채점 구성을 업데이트합니다; 기존 결과는 오래된 것으로 표시됩니다.
벤치마크set_benchmark_reference골드 기준 출력을 저장하고 검증됨으로 표시합니다 — 실행 전에 필요합니다.
벤치마크delete_benchmark_scenario시나리오와 그 결과를 삭제합니다.
벤치마크run_benchmark명시적 모델 목록, 선택한 제공자의 모든 활성 모델, 또는 모든 활성 모델에서 시나리오를 실행합니다 — 각 결과는 기준과 대조하여 자동 채점됩니다.
레코드list_records유형, 성공 여부, model, 작업, 자유 텍스트 검색으로 필터링하여 과거 record를 살펴봅니다.
레코드get_record하나의 레코드에 대한 전체 구조화된 출력 + 검증 오류입니다.
레코드get_stats집계된 조직 통계: 총계, 성공률, 토큰, 비용.
첨부 파일upload_attachmentbase64 파일(filename, content_base64, media_type?)을 업로드하고 enrich_entity에서 사용할 첨부 파일 ID를 반환합니다.
첨부 파일delete_attachmentID로 첨부 파일을 삭제합니다 — 강화 후 유용한 정리 단계입니다.

리소스

리소스를 사용하면 Claude가 도구 호출을 소모하지 않고 데이터를 탐색할 수 있으며, LLM 클라이언트는 이를 파일처럼 취급합니다. 두 리소스 유형 모두 저렴한 인라인 표시를 위해 Markdown으로 렌더링됩니다.

URI 템플릿설명
enricher://schemas/{schema_id}Markdown으로 렌더링된 저장된 스키마 — 메타데이터 헤더와 코드 블록으로 감싼 JSON 형태의 GeneratedJsonSchema입니다.
enricher://records/{record_id}Markdown으로 렌더링된 과거 강화 레코드 — 메타데이터 + 구조화된 출력 + 검증 오류.

킬러 기능: 대화형 분류 재개

enrich_entity에 분류 모델을 사용하도록 요청했는데 엔티티가 스키마 유형과 일치하지 않으면, 도구는 구조화된 세부 정보와 함께 오류가 아닌 응답을 반환합니다. Claude가 이를 읽어 근거를 사용자에게 제시하고, (사용자 확인 시) force_after_classification_warning=true로 재시도합니다 — 이 경우 재시도에서 분류기를 제거합니다.

{
  "success": false,
  "error_code": "classification_warning",
  "message": "Pre-flight classification rejected the entity. ...",
  "classification": {
    "status": "mismatch",
    "reasoning": "Titan is a moon of Saturn, not a planet.",
    "confidence": 0.97
  },
  "job_id": "..."
}

n8n과 Make는 파이프라인 도중에 사용자에게 물어볼 수 없기 때문에 이 상태에서 자동으로 취소됩니다. MCP는 물어볼 수 있으며, 바로 이 차이 하나가 커넥터가 존재하는 이유입니다.

동일한 대화형 기능이 두 번째 흐름을 지원합니다: generate_sample이 원본 문서와 함께 실행되면, 플래너가 구조적 설명 요청 질문과 함께 일시 중지될 수 있습니다. Claude가 이를 사용자에게 전달하고 answer_job_question으로 작업을 재개합니다 — 샘플이 생성될 때까지 반복적으로 진행됩니다.

오류 코드

도구 오류는 error_code 필드가 있는 구조화된 딕셔너리로 변환되어, Claude가 자유 텍스트를 파싱하는 대신 패턴 매칭을 할 수 있습니다. HTTP 계층은 명확하게 매핑됩니다: 402 → 할당량 또는 credit 오류, 422 → classification 경고, 504 → 타임아웃, 502 → 업스트림 LLM 실패.

error_code시점
invalid_request잘못된 형식의 UUID, 상호 배타적인 인수(schema_id + target_schema), 또는 요청 본문 검증 실패.
prompt_limit_reached일별/주별/월별 prompt 할당량이 소진되었습니다(HTTP 402). 본문에 기간, 한도, 사용량, 필요량이 포함됩니다.
insufficient_creditsorganization에 결제가 활성화되어 있으나 credit 잔액이 너무 적어 작업을 시작할 수 없습니다(HTTP 402). 본문에 잔액과 구매 URL이 포함됩니다.
model_limit_exceeded요금제가 허용하는 것보다 많은 모델을 요청했습니다(HTTP 402). 한도와 요청 수를 반환합니다.
language_limit_exceeded요금제가 허용하는 것보다 많은 언어를 요청했습니다(HTTP 402).
concurrent_job_limit_reached이 organization에 활성 enrichment 작업이 너무 많습니다. 기다리거나 요금제를 업그레이드하세요.
classification_warning⚡ 오류 아님: 사전 검사 classifier가 entity를 거부했습니다. 응답에 classification 컨텍스트가 포함되어 있어 Claude가 사용자에게 확인을 요청하고 force_after_classification_warning=true로 재시도할 수 있습니다.
benchmarks_not_in_plan벤치마크 도구에는 소유자 역할과 Model Benchmarks가 포함된 요금제가 필요합니다(HTTP 403).
enrichment_timeout작업이 timeout_seconds를 초과했습니다. 모델 수를 줄이거나 엔터티를 분할하는 것을 권장합니다.
schema_generation_timeout스키마 생성이 timeout_seconds를 초과했습니다.
schema_generation_failed스키마 생성 중 업스트림 LLM 오류가 발생했습니다 (HTTP 502).
cancelled작업이 실행 도중 취소되었습니다(HTTP 499).
not_found스키마 또는 레코드 ID가 조직에 존재하지 않습니다.
http_error구조화된 세부 정보 본문이 없는 HTTP 오류에 대한 포괄 처리입니다.

의도적 생략

함께 보기