ابنِ على Hekk

سجّل وكيلك، ومرّر مستخدمك عبر شاشة موافقة Hekk، ثم نادِ ١٢ أداة عبر MCP أو REST — السجل نفسه يشغّل الاثنين.

الوكلاء عملاء OAuth عموميون: رمز تفويض مع PKCE ‏(S256). لا يوجد سر عميل — والـ client_id ليس بيانات اعتماد.

البدء السريع

  1. 1. سجّل وكيلك أدناه — تحصل على client_id فورًا.

  2. 2. أرسل مستخدمك إلى عنوان التفويض (يسجّل الدخول ويحدد الصلاحيات والحدود):

    https://hekkapp.com/en/agents/connect?response_type=code&client_id=<client_id>&redirect_uri=<redirect_uri>&scope=discover%20book&state=<state>&code_challenge=<S256_challenge>&code_challenge_method=S256
  3. 3. استبدل الرمز بالرموز (وصول ساعة، تحديث ٣٠ يومًا متجدد):

    curl -X POST https://hekkapp.com/api/agent/v1/oauth/token \
      -H "Content-Type: application/json" \
      -d '{
        "grant_type": "authorization_code",
        "code": "<code>",
        "redirect_uri": "<redirect_uri>",
        "client_id": "<client_id>",
        "code_verifier": "<pkce_verifier>"
      }'
    curl -X POST https://hekkapp.com/api/agent/v1/oauth/token \
      -H "Content-Type: application/json" \
      -d '{
        "grant_type": "refresh_token",
        "refresh_token": "<refresh_token>",
        "client_id": "<client_id>"
      }'
  4. 4. نادِ الأدوات عبر MCP أو REST — أدوات الإنفاق تتطلب Idempotency-Key عبر REST:

    {
      "mcpServers": {
        "hekk": { "url": "https://hekkapp.com/agents/mcp" }
      }
    }
    curl -X POST https://hekkapp.com/api/agent/v1/tools/create_booking \
      -H "Authorization: Bearer <access_token>" \
      -H "Content-Type: application/json" \
      -H "Idempotency-Key: <unique-key>" \
      -d '{
        "providerId": "<providerId>",
        "serviceId": "<serviceId>",
        "address": "Building 12, Road 3419, Manama",
        "acceptedPrice": 25.000
      }'

رمز الوصول يعيش ساعة، لكن المنحة والوكيل والعميل يُعاد التحقق منهم عند كل نداء — الإلغاء والإيقاف ينفذان فورًا لا عند الانتهاء.

سجّل وكيلك

عنوان في كل سطر. مطابقة تامة عند التفويض.

البدء السريع ونقاط الاتصال

MCP (بث HTTP)

https://hekkapp.com/agents/mcp

قاعدة REST API

https://hekkapp.com/api/agent/v1

التفويض (الموافقة)

https://hekkapp.com/en/agents/connect

الرمز

https://hekkapp.com/api/agent/v1/oauth/token

مورد OAuth المحمي

https://hekkapp.com/.well-known/oauth-protected-resource

خادم تفويض OAuth

https://hekkapp.com/.well-known/oauth-authorization-server

اكتشاف MCP

https://hekkapp.com/.well-known/mcp

llms.txt

https://hekkapp.com/llms.txt

الصلاحيات

discover

الاستكشاف والتسعير

تصفّح الفئات ومقدّمي الخدمات وطلب الأسعار — قراءة فقط.

discover_servicesrequest_quoteget_bookinglist_bookings
message

مراسلة مقدّمي الخدمات

إرسال وقراءة رسائل التنسيق مع مقدّم الخدمة.

send_messageget_messages
book

إنشاء وإلغاء الحجوزات

حجز الخدمات وإلغاؤها ضمن الحدود.

create_bookingcancel_booking
complete

تأكيد الإنجاز

تحديد المهمة كمكتملة نيابةً عنك.

confirm_completion
pay

الدفع

تسوية الدفع لمهمة ضمن الحدود.

pay
review

ترك التقييمات

إرسال تقييمك وكلماتك بعد المهمة (لا يجوز تلفيقها).

submit_review

مرجع الأدوات

discover_services

scope: discover

تصفّح الفئات والخدمات ومقدّمي الخدمات المرتّبين — قراءة فقط.

المعاملالنوعمطلوبملاحظات
categorystringcategory slug; omit to list all categories
querystringsubstring match on provider name
minRatingnumber 0–5
maxStartingPriceBHD
limitint 1–50default 20
{ "categories": [{ "slug": "plumbing", "nameEn": "Plumbing", "nameAr": "السباكة" }] }

request_quote

scope: discover

احصل على سعر «يبدأ من» لخدمة من مقدّم أو أكثر.

المعاملالنوعمطلوبملاحظات
serviceIdcuid
providerIdscuid[] 1–10omit = every provider offering the service
descriptionstring ≤2000
{ "quotes": [{ "providerId": "…", "providerName": "…", "startingPrice": 15.000, "currency": "BHD" }] }

create_booking

scope: bookيتطلب Idempotency-Key ‏(REST)قد يعيد pending_human_approval

أنشئ حجزًا. يخضع للحدود؛ ‏409 إن تجاوز السعر الحي acceptedPrice؛ قد يتوقف لموافقة بشرية.

المعاملالنوعمطلوبملاحظات
providerIdcuid
serviceIdcuid
addressstring 5–300
latitudenumber
longitudenumber
scheduledAtISO date
notesstring ≤2000
acceptedPriceBHD409 if the live price exceeds this
{ "bookingId": "…", "status": "PENDING", "price": 25.000 }

get_booking

scope: discoverبيانات شخصية مقيّدة

حالة حجز واحد وتفاصيله. هاتف مقدّم الخدمة يظهر بعد القبول فقط.

المعاملالنوعمطلوبملاحظات
bookingIdcuid
{ "status": "ACCEPTED", "price": 25.000, "provider": { "name": "…", "phone": "+973…" } }

list_bookings

scope: discover

اعرض حجوزات العميل مع تصفية اختيارية بالحالة.

المعاملالنوعمطلوبملاحظات
statusBookingStatus
limitint 1–100default 50
{ "bookings": [{ "bookingId": "…", "status": "COMPLETED", "hasReview": false }] }

send_message

scope: message

أرسل رسالة تنسيق لمقدّم الخدمة المكلّف (موسومة عبر وكيل).

المعاملالنوعمطلوبملاحظات
bookingIdcuid
bodystring 1–2000
{ "messageId": "…", "at": "2026-01-01T10:00:00.000Z" }

get_messages

scope: message

اقرأ المحادثة مع مقدّم الخدمة المكلّف.

المعاملالنوعمطلوبملاحظات
bookingIdcuid
limitint 1–200default 50
{ "messages": [{ "from": "PROVIDER", "body": "On my way", "viaAgent": false }] }

confirm_completion

scope: complete

علّم المهمة مكتملة نيابةً عن العميل.

المعاملالنوعمطلوبملاحظات
bookingIdcuid
{ "bookingId": "…", "status": "COMPLETED" }

pay

scope: payيتطلب Idempotency-Key ‏(REST)قد يعيد pending_human_approval

سوِّ الدفع ضمن الحدود — اعتماد فقط عند الإطلاق، لا خصم عبر الإنترنت.

المعاملالنوعمطلوبملاحظات
bookingIdcuid
amountBHD
{ "paymentId": "…", "status": "AUTHORIZED", "method": "CASH" }

submit_review

scope: reviewيتطلب humanAttested

أرسل تقييم العميل وكلماته منسوبة عبر وكيل. لا تلفيق أبدًا.

المعاملالنوعمطلوبملاحظات
bookingIdcuid
ratingint 1–5
commentstring ≤2000
humanAttestedliteral trueattests these are the human's own words
{ "reviewId": "…", "attribution": "via_agent" }

cancel_booking

scope: book

ألغِ حجزًا وفق سياسة الإلغاء.

المعاملالنوعمطلوبملاحظات
bookingIdcuid
reasonstring ≤500
{ "bookingId": "…", "status": "CANCELLED" }

get_audit_log

أي منحة

اقرأ كل ما فعله هذا الوكيل لهذا العميل.

المعاملالنوعمطلوبملاحظات
limitint 1–200default 50
{ "actions": [{ "tool": "create_booking", "result": "ok", "amount": 25.000 }] }

get_approval

أي منحة

استعلم عن حالة موافقة بشرية معلّقة: موافَق عليها أو مرفوضة أو منتهية أو ما زالت معلّقة — مع معرّف الطلب المرتبط بعد الموافقة.

المعاملالنوعمطلوبملاحظات
approvalIdstringfrom a pending_human_approval response
{ "approvalId": "…", "status": "APPROVED", "tool": "create_booking", "bookingId": "…", "expiresAt": "…" }

الضوابط والأخطاء والحدود

بوابات الإنفاق

تمر create_booking وpay بثلاث بوابات على الخادم: سقف المهمة، وسقف ٣٠ يومًا متحركًا (يحتسب حجوزات هذه المنحة غير الملغاة فقط)، وبوابة أول حجز مع مقدّم جديد. الحد الفارغ يعني بوابة دائمًا — لا إنفاقًا مفتوحًا.

عقد pending_human_approval

النداء المُقيّد ينجح بحالة pending_human_approval مع رابط تأكيد صالح ٣٠ دقيقة. يوافق العميل بالبريد أو من حسابه؛ وعند الموافقة تعيد المنصة تنفيذ طلبك الأصلي.

{
  "status": "pending_human_approval",
  "approval": {
    "id": "<approvalId>",
    "confirmUrl": "https://hekkapp.com/en/agents/approvals/<token>",
    "expiresAt": "2026-01-01T12:30:00.000Z"
  },
  "reason": "This action is over your spend limit and needs your confirmation."
}

// Then poll the outcome (do NOT retry the original call with a new Idempotency-Key):
// POST https://hekkapp.com/api/agent/v1/tools/get_approval  { "approvalId": "<approvalId>" }
// → { "status": "PENDING" | "APPROVED" | "DECLINED" | "EXPIRED", "bookingId": "…" }

أظهر confirmUrl لمستخدمك دائمًا — تسليم البريد جهدٌ غير مضمون.

أعمار الرموز

  • رمز الوصول — ساعة واحدة (hga_…)
  • رمز التحديث — ٣٠ يومًا، يتجدد مع كل استخدام (hgr_…)
  • رمز التفويض — ٥ دقائق، استخدام واحد (hac_…)
  • رابط تأكيد الموافقة — ٣٠ دقيقة (apr_…)

رموز الأخطاء

codeHTTPالمعنى
invalid_token401رمز وصول مفقود أو غير معروف.
token_expired401انتهت صلاحية رمز الوصول — جدّده.
grant_revoked403ألغى المستخدم التفويض (أو انتهت مدته). أوقف الطلبات واطلب موافقة جديدة.
agent_suspended403الوكيل موقوف على مستوى المنصة.
insufficient_scope403التفويض لا يشمل الصلاحية المطلوبة لهذه الأداة.
cap_exceeded403تجاوزٌ لحد الإنفاق ولا يمكن اعتماده مباشرة.
pending_human_approval200ليست خطأً — الإجراء متوقف بانتظار رابط تأكيد من العميل البشري (يتضمن الرد approvalId وconfirmUrl). اعرض الرابط وانتظر؛ لا تُعد المحاولة بمفتاح Idempotency جديد.
not_found404معرّف مورد غير معروف لهذا التفويض.
conflict409تعارض في الحالة — مثل تجاوز السعر الحالي للسعر المقبول.
disabled409هذه الإمكانية معطّلة على مستوى المنصة.
rate_limited429تجاوز 120 طلبًا في الدقيقة لهذا التفويض — خفّف الوتيرة.
validation400فشل التحقق من بنية الطلب (التفاصيل مرفقة).
internal500خطأ غير متوقع في الخادم — يمكن إعادة المحاولة مرة واحدة ثم الإبلاغ.

حدود المعدل

١٢٠ طلبًا في الدقيقة لكل منحة عبر REST. التجاوز يعيد rate_limited.

Idempotency-Key وحد المعدل يسريان على REST فقط حاليًا — فضّل REST لإعادة محاولات أدوات الإنفاق.

تغيير (يوليو 2026): عندما يطلب الوكيل صلاحية كاملة (بدون معامل scope)، تعرض شاشة الموافقة صلاحيات الإنفاق (book, complete, pay, review) غير محددة افتراضيًا — على المستخدم تفعيلها بنفسه. اطلب فقط الصلاحيات التي يحتاجها وكيلك.

→ العودة إلى نظرة عامة على بوابة الوكلاء