새로운 분야의 디자인 파트너 모집—새로운 산업을 개척하면 플랫폼을 반값에 제공

Tools API

Nexevo는 REST Tools API를 노출하므로, 모든 agent 프레임워크의 SDK(LangChain, Anthropic, LlamaIndex, Gemini 또는 커스텀 클라이언트)가 해당 프레임워크가 이미 사용하는 와이어 포맷으로 워크스페이스 도구의 안전한 하위 집합을 소비할 수 있습니다.

개요

Tools API는 MCP 서버의 REST 보완재입니다. MCP 네이티브 클라이언트(Claude Desktop, Cursor)에는 MCP를 사용하고, 프레임워크 고유의 도구 호출 포맷으로 순수 REST JSON을 원할 때 Tools API를 사용하세요.

엔드포인트

세 개의 REST 엔드포인트이며, 모두 워크스페이스 API 키로 인증됩니다:

  • GET /v1/tools?format=openai — 요청한 와이어 포맷으로 사용 가능한 모든 도구 스키마를 나열합니다.

  • GET /v1/tools/{name}?format=anthropic — 단일 도구의 스키마.

  • POST /v1/tools/{name}/invoke — 인수와 함께 도구를 실행합니다.

인증

REST API와 동일한 워크스페이스 API 키Authorization 헤더에 사용하세요. 키는 호출을 하나의 워크스페이스에 바인딩하므로 클라이언트는 해당 워크스페이스의 도구와 데이터만 보게 됩니다.

http
Authorization: Bearer sk-ws-...

노출되는 것

사용 가능한 것은 agent 도구 모음의 안전한, 읽기 / 연산 전용 하위 집합뿐입니다(MCP 서버의 범위와 동일):

  • 웹 리서치 — 검색, 페이지 읽기, 스크랩, PDF/문서 읽기, 이미지 OCR.

  • 오픈 데이터 — arXiv, SEC EDGAR, World Bank, OECD, 시장 데이터, RSS.

  • 귀하의 워크스페이스 knowledge — 장기 메모리와 업로드된 knowledge에 대한 rag_search.

  • 연산 — 계산기, 단위 변환 및 기타 순수 헬퍼.

생성, 이메일, 브라우저, connector, SQL 및 파괴적 액션은 노출되지 않습니다. 외부 클라이언트는 읽고 추론할 수는 있지만, 비용을 들이거나 변경할 수는 없습니다.

와이어 포맷

format 쿼리 매개변수가 도구 스키마의 직렬화 방식을 선택합니다. 프레임워크 SDK가 기대하는 것을 선택하세요:

format

스키마 필드

사용 대상

openai(기본값)

parameters

OpenAI Chat Completions, LangChain

openai_responses

parameters(평면)

OpenAI Responses API

anthropic

input_schema

Anthropic Messages API

mcp

inputSchema

MCP 호환 클라이언트

gemini

parameters

Google Gemini FunctionDeclarations

도구 나열

bash
curl https://nexevo.ai/v1/tools?format=anthropic \
  -H "Authorization: Bearer sk-ws-..."
json
{
  "tools": [
    {
      "name": "web_search",
      "description": "Search the public web ...",
      "input_schema": {
        "type": "object",
        "properties": { "query": { "type": "string" } },
        "required": ["query"]
      }
    }
  ],
  "format": "anthropic"
}

도구 호출

bash
curl -X POST https://nexevo.ai/v1/tools/web_search/invoke \
  -H "Authorization: Bearer sk-ws-..." \
  -H "Content-Type: application/json" \
  -d '{"arguments": {"query": "latest LLM benchmarks"}}'
json
{
  "content": "{\"count\": 5, \"results\": [...]}",
  "ok": true,
  "error_kind": "",
  "artifacts": []
}

도구 오류는 ok: false와 함께 error_kind(timeout / exception) 및 사람이 읽을 수 있는 content를 반환합니다. HTTP 오류가 아니므로 호출한 agent가 대응할 수 있습니다.

프레임워크 통합

일반적인 통합 패턴: 도구 목록을 한 번 가져와 프레임워크의 도구 호출 API에 전달한 뒤, 모델이 내보내는 각 도구 호출을 POST /v1/tools/{name}/invoke로 라우팅합니다.

Anthropic SDK

python
import anthropic, httpx

client = anthropic.Anthropic()
BASE = "https://nexevo.ai/v1"
HEADERS = {"Authorization": "Bearer sk-ws-..."}

# 1. fetch tools in Anthropic format
tools = httpx.get(f"{BASE}/tools", params={"format": "anthropic"}, headers=HEADERS).json()["tools"]

# 2. let Claude pick a tool, then execute it via Nexevo
msg = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=1024,
    tools=tools,
    messages=[{"role": "user", "content": "What's in my knowledge base about Q3?"}],
)
for block in msg.content:
    if block.type == "tool_use":
        r = httpx.post(f"{BASE}/tools/{block.name}/invoke",
                       headers=HEADERS, json={"arguments": block.input})
        print(r.json()["content"])

OpenAI / LangChain

python
import httpx
from langchain_core.tools import StructuredTool

BASE = "https://nexevo.ai/v1"
HEADERS = {"Authorization": "Bearer sk-ws-..."}

# fetch in OpenAI format, wrap each as a LangChain tool
raw = httpx.get(f"{BASE}/tools", params={"format": "openai"}, headers=HEADERS).json()["tools"]

def make_executor(name):
    def _run(**kwargs):
        r = httpx.post(f"{BASE}/tools/{name}/invoke", headers=HEADERS, json={"arguments": kwargs})
        return r.json()["content"]
    return _run

tools = [
    StructuredTool.from_function(
        func=make_executor(t["function"]["name"]),
        name=t["function"]["name"],
        description=t["function"]["description"],
        # args_schema can be derived from t["function"]["parameters"]
    )
    for t in raw
]