OneLi ב־LangChain / LangGraph
איך נותנים לסוכן שבנוי ב־LangChain / LangGraph לבצע שיחות טלפון בעברית דרך OneLi, לעקוב אחרי השיחה, לענות להתייעצויות ולקבל את התוצאה.
מאז langchain 1.4 התיעוד מציג את MCPAdapter המובנה (בטא) במקום MultiServerMCPClient. הסוכן שנוצר עם create_agent רץ על LangGraph.
התקנה
- יוצרים מפתח API ב־oneli.io/app/connect ושומרים אותו במשתנה הסביבה
ONELI_API_KEYבשרת. - מתקינים את החבילות:
pip install "langchain[mcp]" langchain-openai # or: npm i langchain @langchain/mcp-adapters @langchain/core @langchain/langgraph zodנבדק מול: langchain 1.4.7 (Python) · langchain 1.5.18 + @langchain/mcp-adapters 2.0.1 (JS)
Python: MCPAdapter
# Current (beta) API: FastMCP Client, auth=<str> sends "Authorization: Bearer <str>"
import asyncio, os
from fastmcp.client import Client
from langchain.agents import create_agent
from langchain.mcp import MCPAdapter
async def main():
async with MCPAdapter(Client("https://mcp.oneli.io/mcp", auth=os.environ["ONELI_API_KEY"])) as adapter:
agent = create_agent("openai:gpt-5", await adapter.list_tools())
r = await agent.ainvoke({"messages": [{"role": "user", "content": "Call +972… and book a table"}]})
print(r["messages"][-1].content)
asyncio.run(main())
# Legacy, still published and still working:
# from langchain_mcp_adapters.client import MultiServerMCPClient
# client = MultiServerMCPClient({"oneli": {"transport": "http", "url": "https://mcp.oneli.io/mcp",
# "headers": {"Authorization": f"Bearer {os.environ['ONELI_API_KEY']}"}}})
# tools = await client.get_tools()JavaScript: MCPAdapter וכלי REST
import { MCPAdapter } from '@langchain/mcp-adapters';
import { createAgent, tool } from 'langchain';
import { z } from 'zod';
const adapter = new MCPAdapter({ servers: { oneli: { url: 'https://mcp.oneli.io/mcp',
headers: { Authorization: `Bearer ${process.env.ONELI_API_KEY}` } } } });
try {
const agent = createAgent({ model: 'openai:gpt-5', tools: await adapter.listTools() });
const res = await agent.invoke({ messages: [{ role: 'user', content: 'Call +972…' }] });
console.log(res.messages.at(-1)?.text);
} finally { await adapter.close(); }
const createCallTask = tool(async ({ to_number, goal, instructions }) => {
const r = await fetch('https://api.oneli.io/v1/call-tasks', { method: 'POST',
headers: { Authorization: `Bearer ${process.env.ONELI_API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ idempotency_key: crypto.randomUUID(), to_number, goal, instructions }) });
return JSON.stringify(await r.json());
}, { name: 'create_call_task', description: 'Place an AI phone call via OneLi',
schema: z.object({ to_number: z.string(), goal: z.string(), instructions: z.string().optional() }) });שימו לב
- langchain.mcp מציג אזהרת LangChainBetaWarning.
- סוג התעבורה נגזר מהכתובת.
- בלקוח הישן השתמשו ב־"transport": "http".
- כלי REST ב־Python: @tool מ־langchain.tools על פונקציה ששולחת את אותה בקשת POST.
מספרי טלפון: OneLi מקבלת מספר ישראלי בכל פורמט נפוץ (050-1234567, +972501234567). כשהשיחה מתחילה, הסוכן ממשיך עם get_call_events או עם GET /v1/call-tasks/:id/events כדי לעקוב, לענות להתייעצויות ולקבל את הסיכום.
מה הלאה
מקורות: docs.langchain.com/oss/python/langchain/mcp · docs.langchain.com/oss/python/langchain/mcp/auth · docs.langchain.com/oss/python/migrate/langchain-mcp-adapters · docs.langchain.com/oss/javascript/langchain/mcp