Tools API
Nexevo mendedahkan REST Tools API supaya SDK mana-mana rangka kerja agent — LangChain, Anthropic, LlamaIndex, Gemini, atau klien tersuai — boleh mengguna subset selamat alat workspace anda, dalam format wayar yang rangka kerja itu sudah bertutur.
Gambaran keseluruhan
Tools API ialah pelengkap REST kepada pelayan MCP. Guna MCP untuk klien natif-MCP (Claude Desktop, Cursor); guna Tools API apabila anda mahu REST JSON tulen dalam format panggilan-alat rangka kerja sendiri.
Endpoint
Tiga endpoint REST, semuanya disahkan dengan kunci API workspace:
GET
/v1/tools?format=openai— senaraikan semua skema alat tersedia dalam format wayar yang diminta.GET
/v1/tools/{name}?format=anthropic— skema satu alat.POST
/v1/tools/{name}/invoke— laksanakan alat dengan argumen.
Pengesahan
Gunakan kunci API workspace yang sama seperti REST API, dalam pengepala Authorization. Kunci mengikat panggilan kepada satu workspace — klien hanya melihat alat dan data workspace itu sahaja.
Authorization: Bearer sk-ws-...Apa yang didedahkan
Hanya subset selamat, baca / kira-sahaja set alat agent tersedia (sama dengan skop pelayan MCP):
Penyelidikan web — gelintar, baca halaman, kikis, baca PDF/doc, OCR imej.
Data terbuka — arXiv, SEC EDGAR, World Bank, OECD, data pasaran, RSS.
Pengetahuan workspace anda —
rag_searchke atas ingatan jangka panjang dan pengetahuan dimuat naiknya.Kira — kalkulator, penukaran unit dan penolong tulen lain.
Penjanaan, e-mel, pelayar, penyambung, SQL dan tindakan memusnah tidak didedahkan — klien luaran boleh membaca dan menaakul, tetapi tidak boleh berbelanja atau mengubah.
Format wayar
Parameter query format memilih cara skema alat disirikan. Pilih yang SDK rangka kerja anda jangkakan:
format | Medan skema | Guna dengan |
|---|---|---|
|
| OpenAI Chat Completions, LangChain |
|
| OpenAI Responses API |
|
| Anthropic Messages API |
|
| Klien serasi-MCP |
|
| Google Gemini FunctionDeclarations |
Menyenaraikan alat
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"
}Memanggil alat
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": []
}Ralat alat memulangkan ok: false dengan error_kind (timeout / exception) dan content boleh-dibaca-manusia — bukan ralat HTTP, jadi agent pemanggil boleh bertindak balas.
Integrasi rangka kerja
Corak integrasi tipikal: ambil senarai alat sekali, hantar ke API panggilan-alat rangka kerja anda, kemudian halakan setiap panggilan alat yang dipancarkan model ke POST /v1/tools/{name}/invoke.
SDK Anthropic
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
]