UTCP 소개
현대의 AI 시스템과 다양한 소프트웨어가 서로 협력하여 동작하기 위해선, 각기 다른 시스템이 동일한 언어와 형식으로 도구(tool)를 호출할 수 있어야 합니다. 특히 다양한 프로토콜(HTTP, CLI, WebSocket, gRPC 등)을 사용하는 도구를 하나의 통합된 방식으로 다룰 수 있다면, 개발자와 AI 모델 양측 모두에게 상당한 이점을 제공합니다. 이러한 필요에 따라 등장한 것이 바로 UTCP(Universal Tool Calling Protocol)입니다.
UTCP는 복잡한 도구 호출 문제를 단일 표준으로 간결하게 해결해주는 프로토콜입니다. 다양한 도구를 검색하고 호출할 수 있으며, 확장성과 상호운용성 측면에서도 유리합니다. 기존의 MCP(Model Context Protocol)와 같은 방식보다 훨씬 유연하고, 다양한 환경에서 쉽게 활용할 수 있도록 설계되었습니다.
AI 시대가 본격화되면서 도구와 모델 간의 유기적인 상호작용은 점차 중요해지고 있습니다. LLM(대규모 언어 모델)들이 도구를 호출해 정보를 얻거나 특정 작업을 실행해야 하는 사례가 급증하면서, 이러한 통신 표준의 필요성이 커지고 있습니다. UTCP는 Pydantic 기반 모델을 사용해 개발자의 부담을 줄이면서도, 다양한 프로토콜에 대응하는 범용성 높은 구조를 제공합니다.
UTCP는 단순한 API 호출을 넘어, CLI, TCP, SSE 등 다양한 통신 방식까지 포괄하는 도구 표준을 지향합니다. 특히 OpenAPI 문서를 자동으로 분석해 도구 정의로 전환하는 기능 등, 기존 API와의 통합성을 극대화한 점도 주목할 만합니다.

UTCP를 MCP와 비교하면, UTCP는 기존의 MCP보다 훨씬 광범위한 범용성과 확장성을 자랑합니다. MCP는 주로 모델과의 상호작용 중심으로 설계되어 있으며, 도구 호출 기능에는 한계가 있습니다. 반면, UTCP는 다양한 통신 프로토콜을 지원하며, 도구 정의, 검색, 인증, 실행의 전 과정을 포함합니다. 또한 MCP는 비교적 제한적인 구조를 가지지만, UTCP는 JSON Schema 기반의 입력/출력 정의 및 다양한 인증 방식(OAuth2, API Key, Basic 등)을 포함하여 실용적인 면에서 우위에 있습니다.
UTCP 사용 예제
클라이언트 설정
간단한 JSON 파일(providers.json)만으로 다양한 도구를 포함한 Provider를 정의할 수 있습니다. 예를 들어 다음과 같이 정의할 수 있습니다:
[
{
"name": "cool_public_apis",
"provider_type": "http",
"url": "http://utcp.io/public-apis-manual",
"http_method": "GET"
}
]
이렇게 JSON 형태로 정의한 도구는 Python 코드에서 다음과 같이 간단히 호출할 수 있습니다:
import asyncio
from utcp.client import UtcpClient
async def main():
# UTCP Client 인스턴스를 생성하면서 주어진 파일 경로를 통해 자동으로 불러옵니다.
client = await UtcpClient.create(
config={"providers_file_path": "./providers.json"}
)
# 아래와 같이 도구를 호출할 수 있습니다.
# 각 도구는 `provider_name.tool_name` 형태의 네임스페이스를 갖습니다.
result = await client.call_tool(
tool_name="cool_public_apis.example_tool",
arguments={}
)
print(result)
if __name__ == "__main__":
asyncio.run(main())
서버에서 도구 제공
FastAPI 같은 프레임워크를 활용하여 직접 UTCP 도구를 제공하는 서버도 구현할 수 있습니다. 예를 들어, 아래와 같이 GET /utcp endpoint에서 도구 정의(tool definition)를 제공하고, 실제 엔드포인트는 /api/weather와 같이 구성됩니다:
from fastapi import FastAPI
app = FastAPI()
# 도구 정의를 제공하는 endpoint
@app.get("/utcp")
def utcp_discovery():
return {
"version": "1.0",
"tools": [
{
"name": "get_weather",
"description": "Get current weather for a location",
"inputs": {
"type": "object",
"properties": {
"location": {"type": "string"}
}
},
"outputs": {
"type": "object",
"properties": {
"temperature": {"type": "number"}
}
},
"tool_provider": {
"provider_type": "http",
"url": "https://example.com/api/weather",
"http_method": "GET"
}
}
]
}
# 실제 도구(tool)의 endpoint
@app.get("/api/weather")
def get_weather(location: str):
return {"temperature": 22.5, "conditions": "Sunny"}
LLM 통합 예제
LLM(OpenAI 등)이 사용자의 질문을 바탕으로 적절한 도구를 자동으로 검색하고 호출하는 고급 예제도 제공합니다. LLM은 JSON 형식으로 응답을 반환하고, 클라이언트는 이를 실행해 다시 LLM에게 전달하는 방식으로 작동합니다. 이는 실제 대화 기반의 AI 에이전트 구축에 필수적인 기능입니다.
프로토콜 사양 및 데이터 모델
UtcpManual
클라이언트가 도구를 사용하려면 아래와 같은 UtcpManual 객체가 제공되어야 합니다. 이 객체를 통해 도구 목록과 프로토콜 버전 등을 포함하며 HTTP 또는 CLI로 제공합니다:
{
"version": "string",
"tools": [
{
"name": "string",
"description": "string",
"inputs": { ... },
"outputs": { ... },
"tags": ["string"],
"tool_provider": { ... }
}
]
}
이 때, tools는 사용 가능한 도구들을 정의하며, 이 때 각 도구는 입력/출력, 설명, 연결 방식 등을 포함하는 아래와 같은 Tool객체 형태를 갖습니다:
{
"name": "string",
"description": "string",
"inputs": {
"type": "object",
"properties": { ... },
"required": ["string"],
"description": "string",
"title": "string"
},
"outputs": { ... },
"tags": ["string"],
"tool_provider": { ... }
}
인증 방식
UTCP는 API Key를 비롯하여 ID/PW를 사용하는 Basic Auth 및 OAuth2를 지원합니다. 이러한 인증은 Provider 설정 시에 JSON 형식으로 간단히 지정할 수 있으며, 실제 요청 시 자동으로 적용됩니다.
지원 프로토콜(Providers)
- HTTP, SSE, HTTP Stream
- CLI, WebSocket, gRPC, GraphQL
- TCP, UDP, WebRTC
- MCP, Text (로컬 파일)
모든 프로토콜은 provider_type 값으로 지정되며, 도구 탐색을 위한 URL과 호출 방식을 함께 지정합니다. 특히 OpenAPI 문서를 직접 사용하여 자동 변환 기능도 제공됩니다.
Python UTCP 클라이언트 아키텍처
Python 클라이언트는 다음과 같은 구성 요소로 이루어져 있습니다:
- UtcpClient: 도구 등록, 실행, 검색의 중심 객체
- ClientTransportInterface: HTTP, CLI 등 각 통신 방식에 맞춘 구현
- ToolRepository: 등록된 도구 저장소 (메모리 기반 기본 제공)
- ToolSearchStrategy: 태그 기반 검색 등 다양한 전략 구현 가능
초기화는 UtcpClient.create() 메서드로 비동기적으로 수행되며, .env 파일을 통한 변수 주입도 지원합니다.
라이선스
UTCP 프로젝트는 MLP-2.0 License로 공개 및 배포 되고 있습니다.
UTCP 스펙 저장소
UTCP Python 구현체 GitHub 저장소
UTCP 공식 문서 사이트
이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. ![]()
파이토치 한국 사용자 모임
이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일
로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)
아래
쪽에 좋아요
를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ ![]()
