المطورون

وكلاء الذكاء الاصطناعي و MCP

يتيح Wonder Fatoora MCP لوكلاء الذكاء الاصطناعي قراءة فواتير المنشأة وعملائها وتجهيز المسودات بموافقتها، بينما ينتظر الإصدار دائمًا موافقة شخص داخل وندرفاتورة.

ما هو

Wonder Fatoora MCP خادم بعيد لبروتوكول سياق النماذج (MCP)، المعيار المفتوح الذي تستخدمه المساعدات الذكية وأطر الوكلاء لاستدعاء الأدوات. يستطيع الوكيل المرتبط بمنشأة استخدام هذه الأدوات:

الأداة الصلاحية ما تفعله
get_company_profile، get_integration_status companies:read قراءة ملف المنشأة ومدى جاهزيتها للإصدار.
search_customers، get_customer customers:read البحث عن العملاء.
search_products، get_product products:read البحث عن المنتجات والخدمات مع أسعارها ونسب ضريبتها.
list_invoices، get_invoice، get_invoice_status، list_invoice_notes، get_note، list_invoice_payments invoices:read قراءة الفواتير والإشعارات الدائنة والمدينة وحالتها لدى الهيئة والدفعات المسجّلة عليها.
get_document_download_link invoices:download رابط PDF صالح لخمس دقائق، لا الملف نفسه.
create_customer، update_customer customers:write إدارة العملاء.
create_product، update_product products:write إدارة المنتجات والخدمات.
create_invoice_draft، validate_invoice_draft، create_note_draft invoices:draft تجهيز المسودات والتحقق من إمكان إصدارها. التجهيز لا يصدر أبدًا.
record_payment payments:write وinvoices:read تسجيل دفعة من العميل على فاتورة صادرة، بما لا يتجاوز المتبقي عليها.
list_projects (companies:read)، get_project_summary (invoices:read)، set_invoice_project (invoices:draft) حسب كل أداة قراءة المشاريع وأرقام كل مشروع من مبيعات وتكاليف وربح، وربط فاتورة بمشروع. المشروع وسم داخلي لا يغيّر شيئاً في الفاتورة ولا فيما يصل إلى الهيئة.
issue_invoice، issue_note، create_credit_note، create_debit_note invoices:issue لا رجعة فيها. معطلة افتراضيًا، وكل استدعاء ينتظر موافقة شخص.

تحتاج كل أداة أيضًا صلاحية الشخص الذي ربط التطبيق، كما في الواجهة البرمجية REST، وتجيب بالحقول نفسها. وتقبل أدوات الكتابة client_request_id: إعادة المحاولة بالمعرّف نفسه تعيد الإجابة الأولى بدل تنفيذ العمل مرتين.

الواجهة البرمجية أم MCP؟

الواجهة البرمجية REST MCP
من يستدعيها برنامجك أنت: متجر أو نظام حجوزات أو خادم منصة SaaS مساعد ذكاء اصطناعي أو إطار وكلاء يتحدث بروتوكول Model Context Protocol
طريقة الدخول مفتاح API لمنشأة واحدة، أو ربط OAuth ربط OAuth وافق عليه مدير المنشأة، أو مفتاح API أُنشئ لوكلاء الذكاء الاصطناعي
ما يستطيعه كل ما تسمح به صلاحياته، ومنه الإصدار بصلاحية invoices:issue قراءة البيانات وتجهيز المسودات؛ أدوات الإصدار تعمل فقط على ربط OAuth فعّلها فيه مدير المنشأة، ولا تعمل بمفتاح API أبدًا
إصدار الفاتورة فوري إن كان المفتاح يحمل invoices:issue ينتظر موافقة شخص على ذلك المستند بعينه داخل وندرفاتورة
الأنسب لـ الفوترة الآلية بكميات كبيرة المساعدات التي تعين الشخص على تجهيز الفواتير وفحصها والبحث عنها

كلاهما يصل إلى بيانات المنشأة نفسها بالصلاحيات نفسها، والفاتورة الصادرة بأي منهما تُرقَّم وتُوقَّع وتُرسل إلى الهيئة بالطريقة نفسها تمامًا. واستدعاء أداة MCP لا يُصدر بمفرده فاتورة ضريبية نهائية أبدًا.

الاتصال

  • نقطة النهاية: POST https://fatoora.tw.sa/mcp عبر Streamable HTTP بإجابات JSON. ويجيب GET و DELETE بـ 405: لا يوجد بث أحداث ولا جلسة.
  • إصدارات البروتوكول: 2026-07-28 (أرسل MCP-Protocol-Version، و _meta فيه الإصدار وقدرات العميل، و Mcp-Method و Mcp-Name)، و 2025-11-25 و 2025-06-18 (ابدأ بـ initialize؛ لا يُصدر معرّف جلسة).
  • التفويض: OAuth 2.1 مع PKCE. سجّل عميلك من الإعدادات ← المطورون ← تطبيقاتي واطلب resource=https://fatoora.tw.sa/mcp. بيانات الخادم الوصفية على /.well-known/oauth-protected-resource/mcp. دون رمز يجيب الخادم بـ 401 مع WWW-Authenticate يشير إلى ذلك المستند، ونقص الصلاحية يجيب بـ 403 insufficient_scope.
  • العملاء الذين يسجّلون أنفسهم (RFC 7591) مثل موصلات مساعدات الذكاء الاصطناعي: عند تفعيل التسجيل الذاتي تذكر بيانات خادم التفويض الوصفية registration_endpoint (POST /oauth/register). التطبيق المسجّل ذاتيًا لا تقف خلفه منشأة: يربط المنشآت الحقيقية فقط، وبعدد محدود منها، وبعد أن يسمح له من يدير المنشأة في شاشة الموافقة التي توضح أن التطبيق سجّل نفسه.
  • الرمز الصادر للواجهة البرمجية REST مرفوض هنا، ورمز MCP مرفوض في الواجهة البرمجية REST. ولا يعمل مفتاح API إلا إذا أُنشئ مع السماح باستخدامه من وكلاء الذكاء الاصطناعي (MCP)، للعملاء الذين لا يرسلون إلا ترويسة ثابتة. والمفتاح المنتهي يجيب بـ 401 مع error.data.code بقيمة token_expired وerror.data.renew_url.
  • يجب أن تأتي عملاء المتصفح من مصدر مسموح: يُرفض أي طلب يحمل Origin آخر.

كيف تعمل الموافقة

  1. يفعّل مدير المنشأة أداة إصدار لتطبيقك من الإعدادات ← المطورون ← التطبيقات المرتبطة. وحتى ذلك الحين تجيب الأداة بـ tool_disabled.
  2. يستدعيها الوكيل، فتتحقق وندرفاتورة من المسودة وتسجل موافقة معلقة مرتبطة بتلك المنشأة والربط والشخص والمستند كما هو محفوظ. لا يصدر شيء: الإجابة approval_required مع رابط و confirmation_id. والعميل بإصدار 2026-07-28 الذي يدعم الطلب عبر رابط يتلقى الرابط بتلك الطريقة.
  3. يفتح الشخص الذي يعمل التطبيق باسمه الرابط، ويؤكد كلمة مروره، ويرى المستند كما تحفظه وندرفاتورة، فيوافق أو يرفض. وتظهر الطلبات المنتظرة أيضًا في الإعدادات ← المطورون ← الموافقات.
  4. يستدعي الوكيل الأداة نفسها بالمعاملات نفسها مع confirmation_id، فتُنفذ مرة واحدة، خلال 15 دقيقة، وبشرط ألا يكون المستند قد تغير منذ الموافقة.

نموذج الأمان

  • لا شيء يرسله الوكيل يُعد موافقة. لا توجد أداة موافقة ولا معامل يوافق؛ لا يوافق إلا شخص مسجل الدخول داخل وندرفاتورة.
  • منشأة واحدة لكل ربط. المنشأة تأتي من الربط، لا من معاملات الأدوات أبدًا.
  • سجلاتك بيانات. النصوص داخل الفواتير وسجلات العملاء تُعاد بيانات ولا تُعامل أبدًا كتعليمات.
  • لا تمرير للرموز. رمز الوكيل لا تستخدمه إلا وندرفاتورة، ولا يُمرر إلى أي جهة أخرى.
  • مسجّل ومحدود. يُسجّل كل استدعاء باسم الأداة دون معاملاتها، ويُحد معدله لكل ربط.
  • نتائج بيئة الاختبار موسومة. في منشأة الاختبار تحمل كل نتيجة SANDBOX؛ ولا شيء هناك فاتورة ضريبية.
وندرفاتورة منتج مستقل، لا يتبع هيئة الزكاة والضريبة والجمارك ولا أي مزود لخدمات الذكاء الاصطناعي.

جاهز للبدء؟

الوصول إلى الواجهة البرمجية ضمن باقات: الأعمال والمؤسسات. أنشئ مفتاحًا من الإعدادات ← مفاتيح API وأرسل أول طلب خلال دقائق.