GitHub MCP 레지스트리를 Naftiko Capability 로 감싸기 — 하나의 스펙에서 REST, MCP, 에이전트 기술까지
요약
본 기술 기사는 GitHub MCP 레지스트리 같은 복잡한 시스템을 Naftiko Capability라는 단일 스펙으로 통합하는 방법을 제시합니다. 이 접근 방식은 REST API, MCP(Machine Capability Protocol), 그리고 에이전트 기술이라는 세 가지 다른 인터페이스를 하나의 통일된 계약(spec)에서 노출할 수 있게 합니다. 이를 통해 인간 사용자, 자동화 파이프라인, AI 에이전트 등 모든 종류의 소비자가 동일하고 일관된 방식으로 레지스트리 정보를 호출하여 접근성을 획기적으로 개선합니다.
핵심 포인트
- Naftiko Capability는 'consumes'(업스트림 API)와 'exposes'(외부 제공 표면)를 정의하는 단일 YAML 아티팩트입니다.
- 이 스펙 기반의 통합은 REST, MCP, 에이전트 기술 등 여러 인터페이스를 하나의 통일된 계약으로 묶어줍니다.
- GitHub 레지스트리 검색과 같은 복잡한 작업을 표준화하고, 모든 소비자(인간, 에이전트, 파이프라인)가 일관되게 접근할 수 있도록 합니다.
- 스펙 자체가 런타임 아티팩트 역할을 하므로, 배포 단위, 문서화, 거버넌스 계약의 역할까지 수행합니다.
GitHub MCP 레지스트리는 존재합니다. 이는 이제 실제 인프라의 일부가 되었으며, 벤더들이 여기에 게시하고 기업들이 이를 거울 (mirror) 로 사용하며, IDE 들이 발견을 위해 이를 가리키기 시작했습니다. 오늘날 개발자로서 레지스트리의 문제는 웹페이지를 스크롤해야 한다는 점입니다. 에이전트는 이를 잘못 읽습니다. 보안 팀은 수동으로 쿼리를 수행합니다. 플랫폼 자동화는 이를 도구처럼 호출할 수 없으며, 메타데이터의 JSON 카탈로그와 키워드 검색처럼 보이기 때문입니다. 이 글은 공학적 관점에서의 논증입니다: 레지스트리를 Naftiko Capability 로 감싸고 하나의 스펙에서 세 가지 표면을 노출하며, 모든 소비자 (인간, 에이전트, 파이프라인) 가 동일한 방식으로 호출할 수 있는 것으로 만듭니다.
Naftiko Capability 의 형태
Naftiko capability YAML 은 두 가지 사항을 선언하는 단일 아티팩트입니다:
- consumes: Capability 가 호출하는 업스트림 API
- exposes: Capability 가 외부로 제공하는 표면 (REST, MCP, Agent Skills)
Naftiko Engine 은 스펙을 실행합니다. 동일한 아티팩트가 배포 단위, 문서화, 거버넌스 계약입니다. 스펙은 런타임에서 벗어나지 않습니다. 왜냐하면 스펙 자체가 런타임 아티팩트이기 때문입니다. 프레임워크 위키에는 Spec-Driven Integration 에 대한 장문의 논증이 있습니다.
GitHub MCP 레지스트리의 경우 Capability 의 형태는 대략 다음과 같습니다:
naftiko:
"1.0.0-alpha2"
info:
name: github-mcp-registry-discovery
description: Conversational discovery surface over the GitHub MCP Registry
version: "1.0.0"
consumes:
github-registry:
type: http
baseUrl: https://api.github.com
auth: github_app_installation
operations:
list-registry-entries:
method: GET
path: /repos/{{ .registry_owner }}/{{ .registry_repo }}/contents/servers
get-registry-entry:
method: GET
path: /repos/{{ .registry_owner }}/{{ .registry_repo }}/contents/servers/{{ .entry_path }}
이는 consume 측면입니다. Capability 는 이제 GitHub Contents API 를 통해 레지스트리를 읽을 수 있습니다.
다음 블록은 대화형 발견 (conversational discovery) 이 구현되는 exposes 측면입니다. 세 가지 노출, 하나의 스펙:
exposes:
rest:
operations:
find-mcp-servers:
method: GET
path: /v1/mcp-servers
parameters:
- name: purpose
in: query
schema:
type: string
- name: vendor
in: query
schema:
type: string
- name: review_status
in: query
schema:
type: string
enum: [approved, pending, revoked]
outputParameters:
- name: servers
type: array
jsonpath: $.results[]
items:
- name: urn
jsonpath: $.urn
- name: install_url
jsonpath: $.install.url
- name: scopes
jsonpath: $.install.scopes[]
- name: review_status
jsonpath: $.governance.review.status
- name: review_date
jsonpath: $.governance.review.date
mcp:
transport: streamable-http
tools:
find-mcp-servers:
description: Find MCP servers in the registry filtered by purpose, vendor, or review status
inputSchema:
type: object
properties:
purpose:
type: string
description: "What task the agent needs the server for"
vendor:
type: string
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기