Tools API
Nexevo は REST の Tools API を提供しており、任意のエージェントフレームワークの SDK——LangChain、Anthropic、LlamaIndex、Gemini、カスタムクライアント——が、そのフレームワークが既に話す通信フォーマットでワークスペースのツールの安全なサブセットを利用できます。
概要
Tools API は MCP サーバー の REST 版の補完です。MCP ネイティブのクライアント(Claude Desktop、Cursor)には MCP を使い、フレームワーク固有のツール呼び出しフォーマットでプレーンな REST JSON が欲しい場合は Tools API を使います。
エンドポイント
3 つの REST エンドポイントがあり、いずれもワークスペースの API キーで認証します:
GET
/v1/tools?format=openai——要求した通信フォーマットで、利用可能なすべてのツールスキーマを一覧表示します。GET
/v1/tools/{name}?format=anthropic——1 つのツールのスキーマ。POST
/v1/tools/{name}/invoke——引数を渡してツールを実行します。
認証
REST API と同じワークスペース API キーを Authorization ヘッダーに設定して使用します。このキーは呼び出しを 1 つのワークスペースに紐づけます——クライアントが見られるのはそのワークスペースのツールとデータだけです。
Authorization: Bearer sk-ws-...公開されるもの
エージェントのツールセットのうち、安全で、読み取り/計算専用のサブセットのみが利用可能です(MCP サーバーと同じ範囲):
Web リサーチ——検索、ページの読み取り、スクレイプ、PDF/ドキュメントの読み取り、画像の OCR。
オープンデータ——arXiv、SEC EDGAR、World Bank、OECD、市場データ、RSS。
あなたのワークスペースのナレッジ——長期記憶とアップロードされたナレッジに対する
rag_search。計算——電卓、単位変換、その他の純粋なヘルパー。
生成、メール、ブラウザ、コネクタ、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 エラーにはならないため、呼び出し側のエージェントが自ら反応できます。
フレームワーク連携
典型的な連携パターン:ツール一覧を一度取得し、フレームワークのツール呼び出し 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
]