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 헤더에 사용하세요. 키는 호출을 하나의 워크스페이스에 바인딩하므로 클라이언트는 해당 워크스페이스의 도구와 데이터만 보게 됩니다.
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 Chat Completions, LangChain |
|
| OpenAI Responses API |
|
| Anthropic Messages API |
|
| MCP 호환 클라이언트 |
|
| Google Gemini FunctionDeclarations |
도구 나열
curl https://nexevo.ai/v1/tools?format=anthropic \
-H "Authorization: Bearer sk-ws-..."{
"tools": [
{
"name": "web_search",
"description": "Search the public web ...",
"input_schema": {
"type": "object",
"properties": { "query": { "type": "string" } },
"required": ["query"]
}
}
],
"format": "anthropic"
}도구 호출
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"}}'{
"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
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
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
]