OneLi ב־Claude Agent SDK / Anthropic API

איך נותנים לסוכן שבנוי ב־Claude Agent SDK / Anthropic API לבצע שיחות טלפון בעברית דרך OneLi, לעקוב אחרי השיחה, לענות להתייעצויות ולקבל את התוצאה.

ב־Claude Agent SDK מגדירים את OneLi כשרת MCP מסוג http עם כותרת Authorization, ומתירים את הכלים שלו. ב־Messages API של Anthropic אפשר להשתמש במחבר MCP, שפונה לשרת בעצמו.

התקנה

  1. יוצרים מפתח API ב־oneli.io/app/connect ושומרים אותו במשתנה הסביבה ONELI_API_KEY בשרת.
  2. מתקינים את החבילות:
Terminal
npm i @anthropic-ai/claude-agent-sdk zod   # or: pip install claude-agent-sdk httpx

נבדק מול: @anthropic-ai/claude-agent-sdk 0.3.308 · claude-agent-sdk 0.2.172 (PyPI)

Agent SDK ב־TypeScript

TypeScript
import { query, tool, createSdkMcpServer } from '@anthropic-ai/claude-agent-sdk';
import { z } from 'zod';

const createCallTask = tool('create_call_task', 'Create an outbound call task',
  { to_number: z.string(), goal: z.string() },
  async (args) => {
    const res = await fetch('https://api.oneli.io/v1/call-tasks', { method: 'POST',
      headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${process.env.ONELI_API_KEY}` },
      body: JSON.stringify({ idempotency_key: crypto.randomUUID(), ...args }) });
    return { content: [{ type: 'text', text: await res.text() }], isError: !res.ok };
  });

for await (const m of query({
  prompt: "Call +972… and confirm tomorrow's appointment",
  options: {
    mcpServers: {
      oneli: { type: 'http', url: 'https://mcp.oneli.io/mcp',
               headers: { Authorization: `Bearer ${process.env.ONELI_API_KEY}` } },
      // REST variant instead of the line above:
      // oneli_rest: createSdkMcpServer({ name: 'oneli_rest', version: '1.0.0', tools: [createCallTask] }),
    },
    allowedTools: ['mcp__oneli__*'],
  },
})) if (m.type === 'result' && m.subtype === 'success') console.log(m.result);

Agent SDK ב־Python

Python
import asyncio, os
from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage

async def main():
    opts = ClaudeAgentOptions(
        mcp_servers={"oneli": {"type": "http", "url": "https://mcp.oneli.io/mcp",
                               "headers": {"Authorization": f"Bearer {os.environ['ONELI_API_KEY']}"}}},
        allowed_tools=["mcp__oneli__*"])
    async for msg in query(prompt="Call +972… and confirm tomorrow's appointment", options=opts):
        if isinstance(msg, ResultMessage) and msg.subtype == "success": print(msg.result)
asyncio.run(main())
# REST variant: @tool("create_call_task", "...", {"to_number": str, "goal": str}) + create_sdk_mcp_server(...)

Messages API: מחבר MCP

Python
import os, anthropic
resp = anthropic.Anthropic().beta.messages.create(
    model="claude-opus-5-5", max_tokens=2000,
    messages=[{"role": "user", "content": "Call +972… and book a table"}],
    mcp_servers=[{"type": "url", "url": "https://mcp.oneli.io/mcp", "name": "oneli",
                  "authorization_token": os.environ["ONELI_API_KEY"]}],
    tools=[{"type": "mcp_toolset", "mcp_server_name": "oneli"}],
    betas=["mcp-client-2025-11-20"])

שימו לב

  • ב־Agent SDK שרת שלא הצליח להתחבר לא זורק שגיאה. בדקו בהודעת system/init אם הסטטוס failed או needs-auth.
  • במחבר ה־MCP של Messages API הערך authorization_token נשלח כ־Bearer, ולכן מפתח oli_ אמור לעבוד. זה לא נבדק מול השרת החי.
  • המחבר תומך בכלים בלבד ואינו יכול לשלוח כותרות שרירותיות.
  • כותרת הבטא mcp-client-2025-11-20; קיימת גם mcp-client-2026-09-15 שמוסיפה רשימות כלים קבועות.

מספרי טלפון: OneLi מקבלת מספר ישראלי בכל פורמט נפוץ (050-1234567,‏ +972501234567). כשהשיחה מתחילה, הסוכן ממשיך עם get_call_events או עם GET /v1/call-tasks/:id/events כדי לעקוב, לענות להתייעצויות ולקבל את הסיכום.

מה הלאה

מקורות: code.claude.com/docs/en/agent-sdk/mcp · code.claude.com/docs/en/agent-sdk/custom-tools · platform.claude.com/docs/en/agents-and-tools/mcp-connector