IvreetMeetIvreetMeetAPI · MCP

הפגישות שלך, מכל כלי AI ומכל תוכנה

REST API, שרת MCP שמתחבר ל-Claude, ChatGPT, Cursor, Codex, Gemini CLI/Antigravity ו-Grok, webhooks, תיוק אוטומטי ל-Google Drive ובוט שמצטרף לפגישות Zoom / Meet / Teams. הכול בהיקף החשבון והארגון שלך בלבד.

REST v1MCP · streamable HTTPOAuth 2.1 + PKCEWebhooksGoogle DriveMeeting bot

התחלה מהירה

  1. בהגדרות החשבון → API ומחבריםצור מפתח. המפתח (ivm_live_…) מוצג פעם אחת.
  2. קריאה ראשונה:
curl https://mcp.ivreetmeet.co.il/v1/meetings?limit=5 \
  -H "Authorization: Bearer ivm_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

ב-Python:

import httpx
API = "https://mcp.ivreetmeet.co.il/v1"
H = {"Authorization": "Bearer ivm_live_XXXXXXXX"}
meetings = httpx.get(f"{API}/meetings", headers=H, params={"limit": 5}).json()["meetings"]
mid = meetings[0]["id"]
summary = httpx.get(f"{API}/meetings/{mid}/summary", headers=H).json()["summary"]
transcript = httpx.get(f"{API}/meetings/{mid}/transcript", headers=H, params={"format": "txt"}).text

העלאת הקלטה (קובץ או כתובת):

curl -X POST https://mcp.ivreetmeet.co.il/v1/meetings -H "Authorization: Bearer ivm_live_…" \
  -F "[email protected]" -F "title=שיחה עם לקוח" -F "summary_instructions=סכם החלטות ומשימות בלבד"
# או
curl -X POST https://mcp.ivreetmeet.co.il/v1/meetings -H "Authorization: Bearer ivm_live_…" -H "Content-Type: application/json" \
  -d '{"source_url":"https://example.com/recording.mp3","title":"פגישת תיאום"}'

תיעוד OpenAPI מלא: /v1/docs. כתובת MCP: https://mcp.ivreetmeet.co.il/mcp.

אימות והרשאות

מפתח API אישי

נוצר בהגדרות (או POST /v1/api-keys עם טוקן ההתחברות של האפליקציה). נשמר אצלנו רק כ-SHA-256. נשלח כ-Authorization: Bearer ivm_live_… ל-REST ול-MCP.

OAuth 2.1 לכלי AI

Claude, ChatGPT, Codex ודומיהם נרשמים אוטומטית (dynamic client registration), מפנים אתכם לדף אישור בעברית, ומקבלים טוקן לשעה עם refresh token. ניתוק מהגדרות → אפליקציות מחוברות.

הרשאות (scopes)

meetings:readקריאת פגישות, תמלולים, סיכומים, דוברים ובריאות תקשורתmeetings:writeהעלאה, סיכום מחדש, מחיקהbots:writeשליחת בוט לפגישהwebhooks:manageניהול webhooksintegrations:manageGoogle Drive

חיבור MCP מכלי AI

כתובת השרת: https://mcp.ivreetmeet.co.il/mcp (streamable HTTP). כל כלי מקבל את אותם 15 כלים: list_meetings, search_meetings, get_meeting, get_summary, get_transcript, get_action_items, get_decisions, get_speakers, get_health, get_processing_status, upload_meeting, join_meeting, resummarize, ו-search/fetch עבור מחקר עומק ב-ChatGPT.

Claude Code

# כניסה עם OAuth (מומלץ): הוסיפו את השרת ואז /mcp בתוך Claude Code כדי להתחבר
claude mcp add --transport http ivreetmeet https://mcp.ivreetmeet.co.il/mcp --scope user
# או עם מפתח API קבוע
claude mcp add --transport http ivreetmeet https://mcp.ivreetmeet.co.il/mcp --header "Authorization: Bearer ivm_live_…"

אחרי ההוספה: /mcp → בחרו ivreetmeet → Authenticate → דף האישור נפתח בדפדפן.

claude.ai (אתר ואפליקציה)

Settings → Connectors (או Customize → Connectors) → Add custom connector → הדביקו https://mcp.ivreetmeet.co.il/mcp → Connect → התחברו בדף האישור. זמין בכל התוכניות (בחינם: מחבר מותאם אחד). בארגון: מנהל מוסיף ב-Organization settings → Connectors.

ChatGPT

Settings → Security and login → הפעילו Developer mode → הוסיפו חיבור (Connectors / Apps) עם הכתובת https://mcp.ivreetmeet.co.il/mcp → אישור OAuth. הכלים search ו-fetch מאפשרים גם Deep research על הפגישות שלכם.

Codex (CLI ו-IDE)

codex mcp add ivreetmeet --url https://mcp.ivreetmeet.co.il/mcp
codex mcp login ivreetmeet          # OAuth
# או ב-~/.codex/config.toml
[mcp_servers.ivreetmeet]
url = "https://mcp.ivreetmeet.co.il/mcp"
bearer_token_env_var = "IVREETMEET_API_KEY"

Cursor

// ~/.cursor/mcp.json  (או .cursor/mcp.json בפרויקט)
{ "mcpServers": { "ivreetmeet": {
    "url": "https://mcp.ivreetmeet.co.il/mcp",
    "headers": { "Authorization": "Bearer ivm_live_…" } } } }

בלי headers, Cursor יפעיל OAuth ויפנה לדף האישור.

Gemini CLI / Antigravity

// ~/.gemini/settings.json
{ "mcpServers": { "ivreetmeet": {
    "httpUrl": "https://mcp.ivreetmeet.co.il/mcp",
    "headers": { "Authorization": "Bearer ivm_live_…" } } } }
// OAuth במקום מפתח:  "oauth": { "enabled": true, "authProviderType": "dynamic_discovery" }

Grok

grok.com/connectors → New ConnectorCustom → הכתובת https://mcp.ivreetmeet.co.il/mcp → השלימו את האימות (OAuth). לפי תיעוד xAI זמין ל-Grok Business ו-Enterprise; ה-API של xAI (Remote MCP tools) עובד עם אותה כתובת ומפתח API.

REST v1

נתיבמה
GET /v1/meמי אני, סוג האימות וההרשאות
GET /v1/meetingsרשימה: status, q, from, to, limit, cursor
GET /v1/meetings/{id}פרטים, מצב עיבוד, דוברים
GET /v1/meetings/{id}/transcript?format=json|txt|srt|vttתמליל עם דוברים וזמנים (json מדופדף ב-offset/limit)
GET /v1/meetings/{id}/summary · /action-items · /decisions · /speakers · /health · /statusסיכום, משימות, החלטות, דוברים, בריאות תקשורת, מצב
GET /v1/meetings/{id}/export?format=pdf|docxקובץ להורדה
POST /v1/meetings · POST /v1/meetings/batchהעלאה (קובץ עד 500 MB או source_url), עד 50 בבת אחת
POST /v1/meetings/upload-url · /upload-url/complete · /registerקבצים גדולים (עד 2 GB) ישירות ל-S3
POST /v1/meetings/{id}/resummarize · DELETE /v1/meetings/{id}סיכום מחדש עם הנחיות, מחיקה
/v1/api-keys · /v1/connected-appsניהול מפתחות ואפליקציות מחוברות (עם טוקן ההתחברות של האפליקציה)
/v1/webhooks · /v1/integrations/google-drive · /v1/botswebhooks, תיוק לדרייב, בוט

העלאות גדולות והקלטות טלפון

פורמטים: MP3, WAV, M4A, AAC, OGG/OPUS, FLAC, WEBM, MP4/MOV/MKV (רק האודיו), AMR/3GP ממקליטי טלפון, WMA, AIFF, CAF. עד 500 MB דרך POST /v1/meetings; עד 2 GB / 4 שעות דרך העלאה ישירה:

import httpx, os
API, H = "https://mcp.ivreetmeet.co.il/v1", {"Authorization": "Bearer ivm_live_…"}
path = "long_call.m4a"; size = os.path.getsize(path)
up = httpx.post(f"{API}/meetings/upload-url", headers=H, json={"filename": path, "size_bytes": size}).json()
if up["method"] == "PUT":
    httpx.put(up["url"], content=open(path, "rb").read(), headers=up["headers"], timeout=None)
else:                                   # multipart: parts of up["part_size"] bytes
    etags = []
    with open(path, "rb") as f:
        for part in up["parts"]:
            r = httpx.put(part["url"], content=f.read(up["part_size"]), timeout=None)
            etags.append({"part_number": part["part_number"], "etag": r.headers["ETag"]})
    httpx.post(f"{API}/meetings/upload-url/complete", headers=H, json={"key": up["key"], "upload_id": up["upload_id"], "parts": etags})
meeting = httpx.post(f"{API}/meetings/register", headers=H, json={"key": up["key"], "title": "שיחה ארוכה"}).json()

Webhooks

אירועים: meeting.completed, meeting.failed, bot.joined, bot.done. כל משלוח חתום; אמתו כך:

import hmac, hashlib
def verify(secret: str, headers: dict, body: bytes) -> bool:
    ts, sig = headers["X-IvreetMeet-Timestamp"], headers["X-IvreetMeet-Signature"]
    expected = "sha256=" + hmac.new(secret.encode(), ts.encode() + b"." + body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, sig)

גוף המשלוח: {"id","event","created_at","data":{"id","title","status","duration_seconds","links":{"app","api"}}}. ניסיונות חוזרים אחרי 1, 5, 15, 60 ו-240 דקות; GET /v1/webhooks/{id}/deliveries מראה הכול. POST /v1/webhooks/{id}/test שולח אירוע בדיקה עכשיו.

תיוק אוטומטי ל-Google Drive

בהגדרות → API ומחברים → חבר Google Drive. כלל התיוק קובע תיקייה לפי {title_prefix} (הטקסט שלפני " - " או ":" בכותרת, למשל שם הפרויקט), {title} או {date:%Y-%m}, ואילו קבצים לשמור: תמליל (DOCX/TXT), סיכום (DOCX/MD) וההקלטה. כל פגישה שמסתיימת מתויקת תוך דקה.

בוט לפגישות Zoom / Google Meet / Teams

הדביקו קישור ב"הוסף בוט לפגישה" (או POST /v1/bots / הכלי join_meeting). הבוט "IvreetMeet" מצטרף, מקליט, ובסיום ההקלטה הופכת לפגישה רגילה עם תמליל וסיכום.

מה באמת קורה: הבוט מצטרף רק כשהפגישה פעילה. ב-Google Meet וב-Teams מישהו בפגישה צריך לאשר את כניסתו (אלא אם הארגון של המארח מאפשר אורחים); ב-Zoom המארח צריך להתחיל את הפגישה ולאשר מחדר ההמתנה. אין צורך שמישהו מ-IvreetMeet יהיה בפגישה, אבל פגישה ריקה לגמרי לא תוקלט.

מגבלות ושגיאות

איך זה נראה

דף האישור (OAuth) שנפתח מתוך Claude / ChatGPT / Cursor
דף האישור (OAuth) שנפתח מתוך Claude / ChatGPT / Cursor
דף האישור בטלפון
דף האישור בטלפון
קריאת כלי MCP מוצלחת (list_meetings) עם טוקן OAuth
קריאת כלי MCP מוצלחת (list_meetings) עם טוקן OAuth
תיעוד OpenAPI חי ב-/v1/docs
תיעוד OpenAPI חי ב-/v1/docs

English

IvreetMeet API — programmatic access to your own Hebrew meeting transcripts and summaries. Base URL https://mcp.ivreetmeet.co.il, OpenAPI at /v1/docs, MCP server at /mcp (streamable HTTP).

Auth. Personal API keys (ivm_live_…, created in Settings → API & connectors, shown once) as Authorization: Bearer; or OAuth 2.1 for AI clients (dynamic client registration, PKCE, Hebrew consent page, 1-hour access tokens, rotating refresh tokens; metadata at /.well-known/oauth-authorization-server). Scopes: meetings:read, meetings:write, bots:write, webhooks:manage, integrations:manage.

Connect. Claude Code: claude mcp add --transport http ivreetmeet https://mcp.ivreetmeet.co.il/mcp then /mcp to sign in (or --header "Authorization: Bearer ivm_live_…"). claude.ai: Settings → Connectors → Add custom connector → the URL. ChatGPT: Developer mode → add the URL (OAuth; search/fetch support deep research). Codex: codex mcp add ivreetmeet --url https://mcp.ivreetmeet.co.il/mcp + codex mcp login. Cursor and Gemini CLI/Antigravity: mcpServers JSON with the URL and an Authorization header (or OAuth). Grok: grok.com/connectors → New → Custom → the URL.

REST. GET /v1/meetings (filters, cursor), /v1/meetings/{id}, /transcript?format=json|txt|srt|vtt, /summary, /action-items, /decisions, /speakers, /health, /status, /export?format=pdf|docx; POST /v1/meetings (multipart file ≤500 MB or JSON source_url), /batch (≤50), presigned /upload-url → S3 PUT or multipart → /register (≤2 GB); /resummarize, DELETE. Webhooks (meeting.completed, meeting.failed, bot.joined, bot.done) signed with X-IvreetMeet-Signature: sha256=HMAC-SHA256(secret, timestamp + "." + body), five retries. Google Drive filing by folder rule. Meeting bot for Zoom / Meet / Teams links: the bot joins only a running meeting and must be admitted by a participant on Meet/Teams (waiting room on Zoom).

Limits. 60 requests/min and 20 uploads/hour per key or client (429 + Retry-After); MCP transcript pages ≤40,000 characters; account quotas apply (402 usage_limit_reached). Errors: {"error":{"code","message"}}.