لوكلاء الذكاء الاصطناعي
اربط وكيلك في خطوة واحدة. وهو يدير قنواتك الاجتماعية.
بُني Markaestro ليُشغَّل بواسطة البرمجيات. عميل MCP مثل Claude Code يسجّل الدخول عبر المتصفح ويحصل على مفتاح مرتبط بعلامة تجارية واحدة؛ وأي وكيل آخر يحصل على المفتاح نفسه من الإعدادات. في الحالتين يستطيع الوكيل اكتشاف الحسابات التي يمكنه النشر عليها، ورفع الوسائط، وإنشاء المنشورات وجدولتها، ونشرها، والإبلاغ عمّا نُشر فعلًا، على Facebook وInstagram وTikTok وLinkedIn وThreads وPinterest.
لا حزمة SDK للتثبيت ولا بيانات اعتماد منصات لمتابعتها. يربط فريقك الحسابات مرة واحدة في لوحة التحكم؛ ومن ثم يتعامل الوكيل مع واجهة API واحدة برمز Bearer.
مصمم للاستقلالية، ومقيّد بغرض
لماذا يكون مفتاح API هو التكامل بأكمله
الجزء الصعب في السماح لوكيل بلمس وسائل التواصل الاجتماعي ليس HTTP. بل التأكد من أن نموذجًا مرتبكًا لا يمكنه النشر إلى العلامة التجارية الخاطئة، أو النشر المزدوج عند إعادة محاولة، أو إرسال شيء لم يقرأه أحد. تلك الضمانات موجودة في واجهة API نفسها، لا في موجهك.
عملاء MCP
سجّل الدخول من العميل. لا شيء للصق.
يمكن لـ Claude Code وClaude وCursor وChatGPT وGrok وGrok Bot وOpenClaw وHermes وكل عميل آخر يتحدث بروتوكول Model Context Protocol الاتصال بخادم MCP المستضاف لدى Markaestro دون أي بيانات اعتماد مضبوطة. أول استدعاء لأداة يفتح متصفحك: سجّل الدخول، واختر مساحة العمل والعلامة التجارية التي يجوز للوكيل التصرف فيها، وراجع الأذونات، ثم انقر على السماح. يتلقى العميل مفتاحًا مرتبطًا بتلك العلامة التجارية ويجدّده بنفسه.
هذا هو OAuth 2.1 القياسي مع PKCE والتسجيل الديناميكي للعملاء، وهي الآلية نفسها خلف خوادم MCP المستضافة الأخرى، لذا يعمل دون أي إضافة خاصة بـ Markaestro. يقع الخادم على https://markaestro.com/api/public/v1/mcp ويتيح إحدى وثلاثين أداة فوق واجهة API العامة: اكتشاف العلامات التجارية والوجهات، ورفع الوسائط، والمسودات والمنشورات المجدولة، والنشر مع متابعة تنفيذ المهام، والعمليات الجماعية، وWebhooks، وقواعد كل قناة.
اربط وكيلك
اختر وكيلك. ثلاث خطوات، ثم يستطيع النشر.
كل عميل أدناه يصل إلى خادم MCP المستضاف نفسه. معظمها يسجّل الدخول عبر المتصفح: أول استدعاء لأداة يفتح صفحة موافقة تختار فيها مساحة العمل والعلامة التجارية التي يمكن للوكيل التصرف فيها، ويحصل العميل على مفتاح مرتبط بتلك العلامة. أما العملاء الذين لا يستطيعون فتح متصفح فيستخدمون مفتاح API لمساحة العمل. الخادم نفسه، الأذونات نفسها، القائمة نفسها في الإعدادات.
Claude Code
يثبّت المكوّن الإضافي المهارة والخادم المستضاف معًا. لا شيء لتهيئته ولا شيء للصقه.
قبل أن تبدأ
- أنت مالك مساحة العمل أو مشرف فيها ببريد إلكتروني مؤكد، في مساحة عمل لها خطة نشطة وعلامة تجارية واحدة على الأقل.
- Claude Code مثبّت ومسجّل الدخول إلى حساب Anthropic الخاص بك.
سجّل الدخول
- اسأل Claude أي شيء عن Markaestro، أو نفّذ /mcp واختر markaestro.
- يفتح متصفحك صفحة الموافقة. اختر مساحة العمل والعلامة التجارية، راجع الأذونات، ثم انقر على السماح.
- لتبديل العلامة لاحقًا، نفّذ /mcp مجددًا، سجّل الخروج، ثم سجّل الدخول بالعلامة الأخرى.
تحقّق
- اطلب من الوكيل استدعاء list_products. يجب أن يرد بالعلامة التجارية الوحيدة التي منحتها وقنواتها المتصلة.
- يظهر الاتصال في الإعدادات، API مع شارة وكيل متصل ووقت آخر استخدام وحجم الطلبات. يمكنك إلغاؤه من هناك في أي وقت.
أضف الخادم
- نفّذ أمري المكوّن الإضافي في أي طرفية، أو أضف الخادم فقط بالأمر الثالث.
# The plugin bundles the skill and the hosted server.
claude plugin marketplace add D3vBaba/Markaestro
claude plugin install markaestro@markaestro
# Or add just the server. No key, no header: the first call opens the browser.
claude mcp add --transport http markaestro https://markaestro.com/api/public/v1/mcpClaude
يستقبل claude.ai وClaude Desktop عنوان الخادم كموصّل مخصص ويسجّلان الدخول عبر صفحة الموافقة نفسها.
قبل أن تبدأ
- أنت مالك مساحة العمل أو مشرف فيها ببريد إلكتروني مؤكد، في مساحة عمل لها خطة نشطة وعلامة تجارية واحدة على الأقل.
- الموصّلات المخصصة متاحة في خطط Claude المدفوعة. في Team وEnterprise قد يحتاج مالك إلى تفعيلها.
سجّل الدخول
- انقر على اتصال بجوار Markaestro. تُفتح صفحة الموافقة في علامة تبويب جديدة.
- اختر مساحة العمل والعلامة التجارية، راجع الأذونات، ثم انقر على السماح. تُغلق علامة التبويب ويظهر الموصّل متصلًا.
- في المحادثة، فعّل Markaestro من قائمة الأدوات عندما تريد أن يستخدمه الوكيل.
تحقّق
- اطلب من الوكيل استدعاء list_products. يجب أن يرد بالعلامة التجارية الوحيدة التي منحتها وقنواتها المتصلة.
- يظهر الاتصال في الإعدادات، API مع شارة وكيل متصل ووقت آخر استخدام وحجم الطلبات. يمكنك إلغاؤه من هناك في أي وقت.
أضف الخادم
- افتح الإعدادات، الموصّلات، ثم إضافة موصّل مخصص.
- الصق عنوان الخادم أدناه، اترك حقول عميل OAuth فارغة، ثم انقر على إضافة.
https://markaestro.com/api/public/v1/mcpCursor
نقرة واحدة تضيف الخادم إلى Cursor. أول استدعاء لأداة يفتح تسجيل الدخول في المتصفح؛ ويحتفظ Cursor بالرمز في سلسلة مفاتيح النظام.
قبل أن تبدأ
- أنت مالك مساحة العمل أو مشرف فيها ببريد إلكتروني مؤكد، في مساحة عمل لها خطة نشطة وعلامة تجارية واحدة على الأقل.
- Cursor مع تفعيل MCP. خوادم MCP البعيدة تعمل في كل خطط Cursor.
سجّل الدخول
- افتح Cursor Settings ثم Tools & MCP. يعرض Markaestro الحالة Needs login؛ انقر عليها.
- يفتح متصفحك صفحة الموافقة. اختر مساحة العمل والعلامة التجارية وانقر على السماح. يلتقط Cursor الرمز ويعرض الأدوات.
- يستخدم Grok Bot داخل Cursor إدخال الخادم نفسه.
تحقّق
- اطلب من الوكيل استدعاء list_products. يجب أن يرد بالعلامة التجارية الوحيدة التي منحتها وقنواتها المتصلة.
- يظهر الاتصال في الإعدادات، API مع شارة وكيل متصل ووقت آخر استخدام وحجم الطلبات. يمكنك إلغاؤه من هناك في أي وقت.
أضف الخادم
- انقر على إضافة إلى Cursor وأكّد طلب التثبيت داخل Cursor.
- أو الصق JSON في .cursor/mcp.json داخل مشروع (مشترك مع فريقك عبر git) أو في ~/.cursor/mcp.json (لك فقط).
// .cursor/mcp.json (project) or ~/.cursor/mcp.json (global)
{
"mcpServers": {
"markaestro": {
"url": "https://markaestro.com/api/public/v1/mcp"
}
}
}على جهاز بناء مشترك أو CI، يحل مفتاح API لمساحة العمل في الترويسات محل تسجيل الدخول.
// Without a browser: pass a workspace API key instead.
{
"mcpServers": {
"markaestro": {
"url": "https://markaestro.com/api/public/v1/mcp",
"headers": { "Authorization": "Bearer mk_live_..." }
}
}
}ChatGPT
يتصل ChatGPT بـ Markaestro كتطبيق مخصص في وضع المطوّر ويسجّل الدخول عبر صفحة الموافقة.
قبل أن تبدأ
- أنت مالك مساحة العمل أو مشرف فيها ببريد إلكتروني مؤكد، في مساحة عمل لها خطة نشطة وعلامة تجارية واحدة على الأقل.
- يحتاج وضع المطوّر إلى ChatGPT Pro أو Business أو Enterprise أو Edu. يعرض Pro أدوات القراءة فقط؛ بينما تعرض Business وEnterprise وEdu كل الأدوات.
- في Business وEnterprise وEdu قد يحتاج مشرف إلى السماح بالتطبيقات المخصصة لمساحة العمل.
سجّل الدخول
- تُفتح صفحة الموافقة أثناء فحص ChatGPT للأدوات. اختر مساحة العمل والعلامة التجارية، انقر على السماح، ثم على إنشاء.
- في المحادثة، انقر على زر الإضافة، ثم المزيد، ثم Markaestro لإتاحة الأدوات.
- يسجّل ChatGPT نفسه لدى Markaestro مرة واحدة لكل اتصال. إعادة الاتصال تنشئ اتصالًا جديدًا يمكنك إلغاؤه على حدة.
تحقّق
- اطلب من الوكيل استدعاء list_products. يجب أن يرد بالعلامة التجارية الوحيدة التي منحتها وقنواتها المتصلة.
- يظهر الاتصال في الإعدادات، API مع شارة وكيل متصل ووقت آخر استخدام وحجم الطلبات. يمكنك إلغاؤه من هناك في أي وقت.
أضف الخادم
- افتح الإعدادات، التطبيقات والموصّلات، الإعدادات المتقدمة، ثم فعّل وضع المطوّر.
- عد إلى التطبيقات والموصّلات وانقر على إنشاء. سمّه Markaestro، الصق عنوان الخادم، اختر OAuth للمصادقة، ثم انقر على فحص الأدوات.
https://markaestro.com/api/public/v1/mcpGrok
يصل Grok إلى Markaestro بثلاث طرق: موصّل مخصص على grok.com، ومن طرفية Grok Build، وكأداة MCP بعيدة في واجهة xAI API.
قبل أن تبدأ
- أنت مالك مساحة العمل أو مشرف فيها ببريد إلكتروني مؤكد، في مساحة عمل لها خطة نشطة وعلامة تجارية واحدة على الأقل.
- تعمل موصّلات grok.com في الخطط الشخصية. تحتاج Grok Business وEnterprise إلى مشرف فريق لتوفير الموصّل.
- مسار xAI API يعمل على جانب الخادم، لذا يستخدم دائمًا مفتاح API لمساحة العمل.
سجّل الدخول
تحقّق
- اطلب من الوكيل استدعاء list_products. يجب أن يرد بالعلامة التجارية الوحيدة التي منحتها وقنواتها المتصلة.
- يظهر الاتصال في الإعدادات، API مع شارة وكيل متصل ووقت آخر استخدام وحجم الطلبات. يمكنك إلغاؤه من هناك في أي وقت.
أضف الخادم
- grok.com: افتح grok.com/connectors، انقر على New Connector، اختر Custom، والصق عنوان الخادم. إذا طلب مربع الحوار معرّف عميل، استخدم القيم أدناه.
- Grok Build: نفّذ الأمرين في الطرفية. يلتقط Grok Build أيضًا إدخال Markaestro من .mcp.json في Claude Code أو mcp.json في Cursor.
- xAI API: أضف كتلة الأداة إلى مصفوفة tools في طلب Responses API.
موصّل grok.com المخصص
Server URL: https://markaestro.com/api/public/v1/mcp
grok.com's Custom Connector asks only for a name and this URL. It registers
itself and opens the browser sign-in, no client id or secret to enter.
(If a future dialog does ask, use client id markaestro-grok-web with a blank secret.)طرفية Grok Build
# Grok Build (terminal). The first tool call opens the browser.
grok mcp add --transport http markaestro https://markaestro.com/api/public/v1/mcp
grok mcp doctor markaestro
# Headless: pass a workspace API key instead.
grok mcp add --transport http markaestro https://markaestro.com/api/public/v1/mcp \
--header "Authorization: Bearer ${MARKAESTRO_API_KEY}"كتلة أداة xAI Responses API
// xAI Responses API: one entry in the request's "tools" array.
// Server-side, so it always uses a workspace API key.
{
"type": "mcp",
"server_url": "https://markaestro.com/api/public/v1/mcp",
"server_label": "markaestro",
"authorization": "Bearer mk_live_...",
"allowed_tools": ["list_products", "list_destinations", "upload_media",
"create_post", "publish_post", "get_job_run"]
}Grok Bot
يعمل Grok Bot على حاسوب سحابي ويقبل خوادم MCP المخصصة بمفتاح ثابت. لا تتوفر في النسخة التجريبية بعد طريقة تسجيل دخول عبر المتصفح للخوادم المخصصة.
قبل أن تبدأ
- أنت مالك مساحة العمل أو مشرف فيها ببريد إلكتروني مؤكد، في مساحة عمل لها خطة نشطة وعلامة تجارية واحدة على الأقل.
- Grok Bot في مرحلة تجريبية مبكرة على خطط SuperGrok وداخل Cursor Pro. الوصول لـ Enterprise عبر قائمة انتظار.
- لديك مفتاح API لمساحة العمل بنطاقات الوكيل. أنشئ واحدًا بالزر أدناه.
استخدم مفتاح API
تحقّق
- اطلب من الوكيل استدعاء list_products. يجب أن يرد بالعلامة التجارية الوحيدة التي منحتها وقنواتها المتصلة.
- يظهر الاتصال في الإعدادات، API مع شارة وكيل متصل ووقت آخر استخدام وحجم الطلبات. يمكنك إلغاؤه من هناك في أي وقت.
أضف الخادم
- افتح إعدادات الموصّلات في Bot الخاص بك وأضف خادم MCP مخصصًا.
- الصق عنوان الخادم، ثم أضف المفتاح كترويسة باستخدام القيم أدناه.
قيم الترويسة لمربع حوار الموصّل
Server URL: https://markaestro.com/api/public/v1/mcp
Header name: Authorization (or x-api-key if that is the only field)
Header value: Bearer mk_live_... (with x-api-key: just mk_live_...)OpenClaw
يضيف OpenClaw خوادم MCP البعيدة من واجهة الأوامر ويكمل تسجيل الدخول على منفذ loopback، لذا يعمل على الجهاز الذي يشغّل بوابتك.
قبل أن تبدأ
- أنت مالك مساحة العمل أو مشرف فيها ببريد إلكتروني مؤكد، في مساحة عمل لها خطة نشطة وعلامة تجارية واحدة على الأقل.
- OpenClaw مثبّت والبوابة تعمل.
- يمكن للخادم بلا متصفح إكمال تسجيل الدخول بالبديل --code.
سجّل الدخول
- يطبع الأمر openclaw mcp login markaestro عنوان تسجيل الدخول وينتظر على منفذ loopback.
- افتح العنوان، اختر مساحة العمل والعلامة التجارية، وانقر على السماح. يخزّن OpenClaw بيانات الاعتماد خارج ملف التهيئة.
- نفّذ openclaw mcp reload ليلتقط الوكلاء العاملون الأدوات.
تحقّق
- اطلب من الوكيل استدعاء list_products. يجب أن يرد بالعلامة التجارية الوحيدة التي منحتها وقنواتها المتصلة.
- يظهر الاتصال في الإعدادات، API مع شارة وكيل متصل ووقت آخر استخدام وحجم الطلبات. يمكنك إلغاؤه من هناك في أي وقت.
أضف الخادم
- نفّذ الأوامر الثلاثة، أو أضف كتلة الخادم إلى ~/.openclaw/openclaw.json.
- بعد نشر مهارة Markaestro على ClawHub، يضيف الأمر openclaw skills install markaestro تعليمات الوكيل أيضًا.
openclaw mcp add markaestro \
--url https://markaestro.com/api/public/v1/mcp \
--transport streamable-http \
--auth oauth
openclaw mcp login markaestro # prints the sign-in URL; add --code <code> when headless
openclaw mcp reloadإدخال تهيئة مكافئ
// ~/.openclaw/openclaw.json
{
"mcp": {
"servers": {
"markaestro": {
"url": "https://markaestro.com/api/public/v1/mcp",
"transport": "streamable-http",
"auth": "oauth"
}
}
}
}بدون متصفح
# Without a browser: a workspace API key from the environment.
openclaw mcp add markaestro \
--url https://markaestro.com/api/public/v1/mcp \
--transport streamable-http \
--header "Authorization: Bearer ${MARKAESTRO_API_KEY}"Hermes
يسجّل Hermes Agent خوادم MCP عبر HTTP من config.yaml ويجري تسجيل الدخول بنفسه، ويخزّن الرمز تحت ~/.hermes/mcp-tokens.
قبل أن تبدأ
- أنت مالك مساحة العمل أو مشرف فيها ببريد إلكتروني مؤكد، في مساحة عمل لها خطة نشطة وعلامة تجارية واحدة على الأقل.
- Hermes Agent مثبّت. توضع الأسرار في ~/.hermes/.env ويُشار إليها بـ ${VAR} في التهيئة.
سجّل الدخول
تحقّق
- اطلب من الوكيل استدعاء list_products. يجب أن يرد بالعلامة التجارية الوحيدة التي منحتها وقنواتها المتصلة.
- يظهر الاتصال في الإعدادات، API مع شارة وكيل متصل ووقت آخر استخدام وحجم الطلبات. يمكنك إلغاؤه من هناك في أي وقت.
أضف الخادم
- أضف كتلة mcp_servers إلى ~/.hermes/config.yaml.
- في جلسة قائمة، أرسل /reload-mcp. تظهر الأدوات باسم mcp_markaestro_<tool>.
# ~/.hermes/config.yaml
mcp_servers:
markaestro:
url: "https://markaestro.com/api/public/v1/mcp"
auth: oauthبدون متصفح
# Without a browser: a workspace API key, kept in ~/.hermes/.env
mcp_servers:
markaestro:
url: "https://markaestro.com/api/public/v1/mcp"
headers:
Authorization: "Bearer ${MARKAESTRO_API_KEY}"عميل MCP آخر
أي عميل يدعم Streamable HTTP وOAuth 2.1 مع التسجيل الديناميكي للعملاء يتصل بعنوان الخادم وحده.
قبل أن تبدأ
- أنت مالك مساحة العمل أو مشرف فيها ببريد إلكتروني مؤكد، في مساحة عمل لها خطة نشطة وعلامة تجارية واحدة على الأقل.
- يدعم العميل خوادم MCP البعيدة عبر Streamable HTTP ويستطيع فتح متصفح لـ OAuth. إن لم يستطع، استخدم علامة تبويب مفتاح API.
سجّل الدخول
تحقّق
- اطلب من الوكيل استدعاء list_products. يجب أن يرد بالعلامة التجارية الوحيدة التي منحتها وقنواتها المتصلة.
- يظهر الاتصال في الإعدادات، API مع شارة وكيل متصل ووقت آخر استخدام وحجم الطلبات. يمكنك إلغاؤه من هناك في أي وقت.
أضف الخادم
- أضف عنوان الخادم في تهيئة MCP للعميل. JSON أدناه هو الشكل الشائع لـ mcpServers.
- لا تهيّئ معرّف عميل أو سرًا. يسجّل العميل نفسه عند أول استخدام.
{
"mcpServers": {
"markaestro": {
"type": "http",
"url": "https://markaestro.com/api/public/v1/mcp"
}
}
}مفتاح API
لمهام CI وعمّال cron والعملاء الذين لا يستطيعون فتح متصفح: مفتاح API لمساحة العمل في ترويسة Authorization يصل إلى الخادم نفسه بالأذونات نفسها.
قبل أن تبدأ
- أنت مالك مساحة العمل أو مشرف فيها ببريد إلكتروني مؤكد، في مساحة عمل لها خطة نشطة وعلامة تجارية واحدة على الأقل.
- يمكنك إنشاء المفاتيح: مالك مساحة العمل أو مشرف فيها ببريد إلكتروني مؤكد.
استخدم مفتاح API
تحقّق
- اطلب من الوكيل استدعاء list_products. يجب أن يرد بالعلامة التجارية الوحيدة التي منحتها وقنواتها المتصلة.
- يظهر الاتصال في الإعدادات، API مع شارة وكيل متصل ووقت آخر استخدام وحجم الطلبات. يمكنك إلغاؤه من هناك في أي وقت.
أضف الخادم
- أنشئ مفتاحًا مرتبطًا بعلامة تجارية واحدة، بالنطاقات التي يحتاجها الوكيل فقط، وبتاريخ انتهاء.
- مرّره كترويسة bearer إلى الخادم المستضاف، أو كـ MARKAESTRO_API_KEY إلى خادم stdio المحلي الذي يستطيع أيضًا رفع الملفات من القرص.
# CI, cron, or any client without a browser: pass a key instead.
claude mcp add --transport http markaestro https://markaestro.com/api/public/v1/mcp \
--header "Authorization: Bearer mk_live_..."
# Local stdio server (can also upload files from disk)
claude mcp add markaestro -e MARKAESTRO_API_KEY=mk_live_... -- npx -y @markaestro/mcp{
"mcpServers": {
"markaestro": {
"type": "http",
"url": "https://markaestro.com/api/public/v1/mcp",
"headers": { "Authorization": "Bearer mk_live_..." }
}
}
}ما الذي يحدث عندما يتصل العميل
خمس خطوات يتولّاها العميل والمتصفح بالكامل. أنت لا ترى سوى صفحة الموافقة.
POST /api/public/v1/mcp → 401 + WWW-Authenticateيستدعي العميل نقطة نهاية MCP دون بيانات اعتماد. يردّ Markaestro بالرمز 401 مع ترويسة WWW-Authenticate تشير إلى مستند بيانات المورد المحمي. هذه الترويسة هي ما يخبر العميل بأن تسجيل الدخول متاح.
GET /.well-known/oauth-protected-resource · /.well-known/oauth-authorization-serverيقرأ العميل مستندين عامين: أي خادم تفويض يحمي نقطة النهاية، وأين توجد نقاط التسجيل والتفويض والرمز الخاصة به. يُقدَّم المستندان على markaestro.com ويمكن تخزينهما مؤقتًا.
POST /api/public/v1/oauth/registerيسجّل العميل نفسه باسم وعنوان رد الاتصال الخاص به. تُقبل عناوين loopback وردود الاتصال عبر https ومخططات التطبيقات الأصلية؛ ويُرفض http العادي إلى مضيف حقيقي. لا حاجة إلى معرّف عميل مُشارك مسبقًا.
GET /oauth/authorize (browser)يفتح متصفحك صفحة الموافقة. يختار مالك مساحة العمل أو مسؤولها ذو البريد الموثّق مساحة العمل والعلامة التجارية، ويعدّل الأذونات، ثم ينقر على السماح. يعيد Markaestro المتصفح إلى العميل مع رمز يُستخدم مرة واحدة.
POST /api/public/v1/oauth/tokenيستبدل العميل الرمز مع مُحقّق PKCE برمز وصول ورمز تحديث. رمز الوصول هو مفتاح API عادي لمساحة العمل، مرتبط بالعلامة التجارية المختارة. تنتهي صلاحيته بعد 30 يومًا؛ والتحديث يبدّل سرّه ويمدّده 30 يومًا أخرى.
الرمز هو مفتاح API حقيقي
النطاقات، والارتباط بالعلامة التجارية، وحدود المعدل، وفحوصات الاشتراك، وعدم التكرار، والإلغاء تمرّ عبر مسار الشيفرة نفسه الخاص بمفتاح أُنشئ يدويًا. لا يوجد نموذج أذونات ثانٍ لفهمه.
مُدرج وقابل للإلغاء في الإعدادات
يظهر الوكيل المتصل في الإعدادات، API مع شارة وكيل متصل، ووقت آخر استخدام، وحجم الطلبات. ألغِه هناك فيفشل الاستدعاء التالي للعميل؛ ويمكن للعميل أيضًا إلغاء رمزه بنفسه عند فصله.
اتصال واحد، علامة تجارية واحدة
كل اتصال مرتبط بعلامة تجارية واحدة بالضبط تُختار عند الموافقة. لتمكين الوكيل من العمل على علامة تجارية ثانية، اربطه مجددًا واختر تلك العلامة. لا يمكن للعميل أبدًا الوصول إلى علامة تجارية لم تُمنح له.
الرموز ورموز التحديث تُستخدم مرة واحدة
تعيش رموز التفويض عشر دقائق وتُستهلك بشكل ذرّي، لذا يفشل أي رمز مُعاد. تُبدَّل رموز التحديث عند كل استخدام وتُخزَّن مجزّأة. وتنتهي صلاحية تسجيلات العملاء الخاملة بعد 180 يومًا.
نقاط النهاية
لمن يبني عميل MCP أو يدقق في التدفق. كل شيء قابل للاكتشاف من مستندي well-known؛ ولا شيء هنا يحتاج إلى إعداد يدوي.
# Discovery (public, cacheable)
GET /.well-known/oauth-protected-resource RFC 9728
GET /.well-known/oauth-authorization-server RFC 8414
# Authorization server
POST /api/public/v1/oauth/register RFC 7591, public clients (PKCE) or client_secret
GET /oauth/authorize?response_type=code&client_id=…&redirect_uri=…
&code_challenge=…&code_challenge_method=S256&state=…
POST /api/public/v1/oauth/token grant_type=authorization_code | refresh_token
POST /api/public/v1/oauth/revoke RFC 7009
# Token response
{ "access_token": "mk_live_<ws>.<client>.<secret>", "token_type": "Bearer",
"expires_in": 2592000, "refresh_token": "…", "scope": "products.read posts.write …" }حلقة الوكيل
خمسة استدعاءات، من البداية إلى النهاية
كل أتمتة في Markaestro هي نسخة من هذه الحلقة. الخطوات من واحد إلى ثلاثة هي Connect API، الواجهة المسطّحة التي ينبغي لمعظم الوكلاء استهدافها. تصل الخطوتان أربعة وخمسة إلى واجهة /api/public/v1 الكاملة للنشر الصريح وتتبّع المهام.
GET /api/connect/v1/social-accountsيُرجع كل حساب متصل قابل للنشر إليه لعلامة المفتاح، كل واحد بمنصة واسم مستخدم ومعرّف غير شفاف. استدعه في بداية كل تشغيل، تتغير الاتصالات.
POST /api/connect/v1/media/create-upload-url → PUTأصدر عنوان URL موقّعًا قصير الأمد وأحادي الاستخدام، ثم نفّذ PUT للبايتات الخام إليه. تحصل على معرّف وسائط. الصور حتى 10 ميجابايت؛ تقبل واجهة API الكاملة أيضًا فيديو حتى 250 ميجابايت.
POST /api/connect/v1/postsمرّر التعليق ومعرّفات الوسائط ومعرّفات الحسابات حرفيًا. اتركه مسودة للمراجعة، أو أرسل is_draft false مع scheduled_at لوضعه على التقويم.
POST /api/public/v1/posts/:id/publishيضع مهمة غير متزامنة في قائمة الانتظار. تُرسل LinkedIn وThreads وPinterest عبر واجهة API الرسمية. تصل Facebook وInstagram وTikTok إلى قائمة انتظار 'للنشر' في مساحة العمل ليقوم إنسان بالنشر بشكل أصلي.
GET /api/public/v1/job-runs/:id · webhooksاستعلم عن معرّف المهمة، أو سجّل نقطة نهاية ويب هوك ودع Markaestro تدفع لك post.published وpost.action_required وpost.failed. لا تفترض أبدًا أن النشر انتهى بشكل متزامن.
بدء سريع
تكامل عملي في أربعة أوامر
أولًا، أصدر المفتاح: افتح الإعدادات ← API، اختر العلامة التجارية المسموح له بالوصول إليها، وحدد النطاقات التي يحتاجها، وامنحه اختياريًا صلاحية. يُعرض المفتاح مرة واحدة، ضعه مباشرة في مخزن أسرار وكيلك. يتطلب إنشاء المفاتيح مسؤولًا أو مالكًا ببريد إلكتروني موثّق.
# The API is served from the marketing apex and the app subdomain alike.
export MARKAESTRO_URL="https://markaestro.com"
export MARKAESTRO_API_KEY="mk_live_<workspaceId>.<clientId>.<secret>"
# 1. What can this key post to?
curl -s "$MARKAESTRO_URL/api/connect/v1/social-accounts" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY"{
"data": [
{
"id": "prod_123#instagram:instagram:ig_123",
"product_id": "prod_123",
"product": "Northwind Coffee",
"platform": "instagram",
"username": "northwindcoffee"
}
]
}# 2. Mint a signed upload url, then PUT the bytes.
RESP=$(curl -s -X POST "$MARKAESTRO_URL/api/connect/v1/media/create-upload-url" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "mime_type": "image/png", "size_bytes": 184320, "name": "cold-brew.png" }')
# → { "media_id": "ast_777", "upload_url": "https://.../media/upload?token=..." }
curl -X PUT "<upload_url>" \
-H "Content-Type: image/png" \
--data-binary @cold-brew.pngis_draft: false مع طابع زمني scheduled_at لوضع المنشور على التقويم.# 3. Put it on the calendar. Pass the account id back verbatim.
curl -X POST "$MARKAESTRO_URL/api/connect/v1/posts" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"caption": "Cold brew season starts Friday.",
"media": ["ast_777"],
"social_accounts": ["prod_123#instagram:instagram:ig_123"],
"is_draft": false,
"scheduled_at": "2026-08-14T15:00:00.000Z"
}'
# 4. Check where everything stands.
curl -s "$MARKAESTRO_URL/api/connect/v1/posts?limit=20" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY"جاهز للاستخدام
تعريفات الأدوات وملخص للوكيل
شيئان لنسخهما. الأول مجموعة مخططات أدوات تغطي حلقة النشر بأكملها، مكتوبة بـJSON Schema، بحيث تعمل كتعريفات أدوات Claude أو وظائف OpenAI أو شكل الإدخال لخادم MCP تستضيفه أنت. الثاني هو الملخص التشغيلي الذي يمنع النموذج من فعل شيء غير متوقع بها.
[
{
"name": "markaestro_list_accounts",
"description": "List the social accounts this Markaestro key can publish to. Call this first in every run. Never hardcode account ids. Returns id, platform, and username.",
"input_schema": { "type": "object", "properties": {}, "required": [] }
},
{
"name": "markaestro_upload_media",
"description": "Upload one image or video to Markaestro and return a media asset id. Images: png, jpeg, webp, gif up to 10 MB. Video: mp4, mov, webm up to 250 MB.",
"input_schema": {
"type": "object",
"properties": {
"file_path": { "type": "string", "description": "Local path to the file to upload." },
"mime_type": { "type": "string", "description": "MIME type of the file." }
},
"required": ["file_path", "mime_type"]
}
},
{
"name": "markaestro_create_post",
"description": "Create a post for one channel. Facebook, Instagram, and TikTok are manual-first: a human posts them natively from the To Post queue. Omit delivery_mode unless the user explicitly asked for unattended publishing.",
"input_schema": {
"type": "object",
"properties": {
"channel": {
"type": "string",
"enum": ["facebook", "instagram", "tiktok", "linkedin", "threads", "pinterest", "x"]
},
"caption": { "type": "string", "description": "Caption text, max 4000 characters." },
"media_asset_ids": {
"type": "array",
"items": { "type": "string" },
"description": "Ids from markaestro_upload_media. Instagram and TikTok require at least one."
},
"destination_id": {
"type": "string",
"description": "From markaestro_list_accounts. Required only when the brand has more than one destination on that channel."
},
"delivery_mode": {
"type": "string",
"enum": ["manual_reminder", "direct_publish", "platform_inbox"],
"description": "Omit for the channel default."
}
},
"required": ["channel", "caption"]
}
},
{
"name": "markaestro_publish_post",
"description": "Queue an async publish run for an existing post. Returns a run id. Poll it, do not assume the post is live.",
"input_schema": {
"type": "object",
"properties": { "post_id": { "type": "string" } },
"required": ["post_id"]
}
},
{
"name": "markaestro_list_posts",
"description": "List posts for this brand, newest first. Filter by status: draft, scheduled, publishing, published, platform_action_required, failed, partial_failed.",
"input_schema": {
"type": "object",
"properties": {
"status": { "type": "string" },
"limit": { "type": "integer", "minimum": 1, "maximum": 100 }
},
"required": []
}
},
{
"name": "markaestro_delete_post",
"description": "Remove a post from Markaestro. Use it to cancel something scheduled. Deleting an already-published post does NOT retract the live copy on the platform.",
"input_schema": {
"type": "object",
"properties": { "post_id": { "type": "string" } },
"required": ["post_id"]
}
}
]You have a Markaestro API key for exactly one brand. Markaestro is the
publishing layer: you supply the caption and the media, it handles the
platform rules, the calendar, and delivery.
Base URL: https://markaestro.com
Auth: Authorization: Bearer $MARKAESTRO_API_KEY
Rules:
- Call GET /api/connect/v1/social-accounts before posting. Pass the returned
account ids back verbatim. Never invent or cache an id across runs.
- Upload media before creating a post; posts reference media ids, not files.
- Facebook, Instagram, and TikTok are manual-first. Creating and publishing
them queues a reminder for a human. That is the intended behavior. Only
send deliveryMode "direct_publish" if the operator explicitly asked for it.
- Send a unique Idempotency-Key on every POST. Reuse the SAME key when
retrying the SAME request; never reuse it for a different one.
- On 429, wait the number of seconds in Retry-After, then retry. On 4xx other
than 429, do not retry. Report the error code and requestId and stop.
- Publishing is async. POST /publish returns a run id; poll
GET /api/public/v1/job-runs/<id> until succeeded or failed.
- To cancel, list with ?status=scheduled and DELETE the post id. Deleting a
published post does not remove it from the platform.
- Never claim a post is live until a run reports succeeded or a post reports
published.يمكن لوكيلك أيضًا جلب هذا بنفسه: curl https://markaestro.com/llms.txt يُرجع ملخصًا نصيًا عاديًا لواجهة API بأكملها، نقاط النهاية، والقواعد، ومعالجة الأخطاء، صغير بما يكفي ليبقى في السياق.
وصفات
سير العمل الأربعة التي تنفذها الوكلاء فعليًا
# Full control: draft → publish → poll. No productId needed:
# the key is already bound to one brand.
POST_ID=$(curl -s -X POST "$MARKAESTRO_URL/api/public/v1/posts" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: post-2026-08-14-linkedin" \
-d '{
"channel": "linkedin",
"caption": "We shipped agent-driven publishing.",
"mediaAssetIds": ["ast_777"]
}' | jq -r .post.id)
RUN_ID=$(curl -s -X POST "$MARKAESTRO_URL/api/public/v1/posts/$POST_ID/publish" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY" \
-H "Idempotency-Key: publish-$POST_ID" | jq -r .run.id)
# queued → running → succeeded | failed
curl -s "$MARKAESTRO_URL/api/public/v1/job-runs/$RUN_ID" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY"# Review the queue, then cancel what the operator rejected.
curl -s "$MARKAESTRO_URL/api/public/v1/posts?status=scheduled&limit=100" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY"
curl -X DELETE "$MARKAESTRO_URL/api/public/v1/posts/pst_123" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY"
# → { "deleted": true, "id": "pst_123" }# One call, up to 25 posts. Per-item results: one bad item
# does not fail the batch.
curl -X POST "$MARKAESTRO_URL/api/public/v1/posts" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: week-33-drop" \
-d '{
"posts": [
{ "channel": "instagram", "caption": "Monday", "mediaAssetIds": ["ast_1"] },
{ "channel": "facebook", "caption": "Tuesday", "mediaAssetIds": ["ast_2"] },
{ "channel": "linkedin", "caption": "Thursday" }
]
}'
# → { "results": [...], "created": 3, "total": 3 }# Let Markaestro call you instead of polling.
curl -X POST "$MARKAESTRO_URL/api/public/v1/webhook-endpoints" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://your-agent.example.com/hooks/markaestro",
"events": ["post.published", "post.action_required", "post.failed"]
}'
# Each delivery carries:
# X-Markaestro-Event post.action_required
# X-Markaestro-Timestamp 2026-08-14T15:00:04.000Z
# X-Markaestro-Signature HMAC of the body with your webhook secret
# The secret is shown once at creation and stored hashed. Verify before acting.ضوابط الحماية
ما يمكن للوكيل فعله وما لا يمكنه
الاستقلالية مفيدة فقط إذا كان نطاق التأثير صغيرًا. تفترض إعدادات Markaestro الافتراضية أن المتصل برنامج قد يكون مخطئًا.
Facebook وInstagram وTikTok يدوية أولًا
تستخدم المنشورات التي ينشئها وكيلك لهذه القنوات افتراضيًا manual_reminder: لا تستدعي Markaestro أبدًا واجهة المنصة نيابة عنها. يُنقل النشر المنشور إلى قائمة انتظار 'للنشر' في مساحة العمل، حيث يقوم شخص بتنزيل الوسائط والنشر بشكل أصلي والتأكيد، بحيث يبدو المنشور تمامًا كما لو صُنع يدويًا، ويراه إنسان قبل وجوده علنيًا. يمكن لوكيل اختيار منشور واحد للنشر عبر API الرسمية باستخدام deliveryMode: "direct_publish"، وعلى TikTok يعني ذلك التسليم إلى صندوق وارد المنشئ، وليس أبدًا منشورًا علنيًا دون إشراف. تنشر LinkedIn وThreads وPinterest برمجيًا بمجرد أن يطلب وكيلك ذلك صراحة.
قلّص نطاق المفتاح
اختر فقط النطاقات التي يحتاجها الوكيل: products.read وmedia.write وposts.read وposts.write وposts.publish وjob_runs.read وwebhooks.manage. يحصل وكيل بحثي يقرأ التقويم فقط على posts.read ولا شيء آخر.
امنحه صلاحية
يمكن إنشاء المفاتيح بصلاحية. يتصرف المفتاح منتهي الصلاحية تمامًا مثل المُلغى، بحيث يتوقف المفتاح الذي يتسرب من بيئة وكيل عن العمل من تلقاء نفسه.
التدوير والإلغاء
دوّر مفتاحًا في مكانه أو ألغه تمامًا من الإعدادات ← API. يعرض كل مفتاح وقت آخر استخدام له وحجم الطلبات، بحيث يكون الوكيل الذي يصمت، أو يخرج عن السيطرة، مرئيًا.
تُفرض حدود المعدل
60 طلبًا في الدقيقة لكل نقطة نهاية و240 في الدقيقة لكل مفتاح. تحمل كل استجابة X-RateLimit-Limit وRemaining- وReset-؛ يحمل 429 Retry-After. احترمه بدلًا من الإلحاح.
Markaestro لا تكتب نيابة عنك أبدًا
لا توجد خطوة توليد. يأتي التعليق من وكيلك، وتأتي الوسائط من مكتبتك أو من خط أنابيب وكيلك. Markaestro هي اليدان، لا الصوت.
الحذف يتم من جانب Markaestro
حذف منشور مجدول يلغيه قبل أن يُرسل. حذف منشور منشور يوقف فقط تتبع Markaestro له، يبقى المنشور الحي حتى يزيله شخص ما على المنصة.
معالجة الفشل
علّمه أي الأخطاء تستحق إعادة المحاولة
كل استجابة خطأ هي JSON برمز error ثابت وrequestId. اجعل وكيلك يقتبس requestId عند الإبلاغ عن فشل، فهذا ما يحتاجه الدعم لتتبّع الاستدعاء.
| الحالة | الرمز | ما ينبغي للوكيل فعله |
|---|---|---|
| 401 | UNAUTHENTICATED | المفتاح مفقود أو مُلغى أو منتهي الصلاحية. توقف واطلب من إنسان مفتاحًا جديدًا، إعادة المحاولة لن تساعد. |
| 403 | FORBIDDEN | يفتقر المفتاح إلى النطاق لهذا الاستدعاء. أبلغ عن الاستدعاء الذي فشل؛ تُغيّر النطاقات في الإعدادات ← API. |
| 403 | API_KEY_NOT_BOUND_TO_PRODUCT | مفتاح صادر قبل ربط العلامة التجارية. اطلب مفتاحًا بديلًا. |
| 400 | VALIDATION_* | خالفت الحمولة قاعدة قناة (وسائط مفقودة، وضع تسليم خاطئ، scheduled_at خاطئ). صحّح الطلب؛ لا تعد المحاولة دون تغيير. |
| 400 | VALIDATION_IDEMPOTENCY_KEY_REUSED | أُرسل نفس Idempotency-Key بنص مختلف. أصدر مفتاحًا جديدًا لكل طلب مميز. |
| 400 | VALIDATION_POST_IS_PUBLISHING | حاول حذف منشور بينما مهمة نشر قيد التنفيذ. انتظر حتى تستقر المهمة، ثم احذف. |
| 409 | VALIDATION_POST_ALREADY_PUBLISHING | مهمة نشر لهذا المنشور موجودة بالفعل في قائمة الانتظار. لا تنشر مرة أخرى، استعلم بدلًا من ذلك عن المهمة الحالية. |
| 402 | SUBSCRIPTION_REQUIRED | لا توجد خطة نشطة مرتبطة بمساحة العمل. اطلب من مالك مساحة العمل مراجعة الفوترة في الإعدادات. |
| 402 | QUOTA_EXCEEDED_MEDIA_UPLOADS | وصلت مساحة العمل إلى حصتها الشهرية للرفع. توقف عن الرفع وأبرز ذلك، لا تزال الوسائط الحالية تُنشر. |
| 404 | NOT_FOUND | المعرّف خارج علامة هذا المفتاح التجارية. تمت الإجابة بـ404 بدلًا من 403 بحيث لا يمكن للمفاتيح استكشاف معرّفات لا تملكها. |
| 429 | RATE_LIMITED | انتظر عدد الثواني المحدد في Retry-After، ثم أعد نفس الطلب بنفس Idempotency-Key. |
استخدم مكدسك الخاص
إذا استطاع إجراء طلب HTTPS، يمكنه النشر
لا توجد مكتبة عميل خاصة بـMarkaestro لاعتمادها ولا إطار عمل للتوحيد القياسي عليه. رمز حامل، JSON للدخول، JSON للخروج.
Claude وClaude Agent SDK
أضف تعريفات الأدوات أعلاه إلى قائمة أدواتك. أشكال JSON Schema موجودة بالفعل بتنسيق استخدام أدوات Claude.
استدعاء الوظائف في OpenAI
تُطابق المخططات نفسها واحدًا لواحد تعريفات الوظائف، أعد تسمية input_schema إلى parameters.
عملاء MCP
Claude Code وClaude وCursor وChatGPT وGrok وGrok Bot وOpenClaw وHermes: أضف عنوان URL الخادم المستضاف وسجّل الدخول عبر المتصفح. وللعملاء الذين يدعمون stdio فقط، يشغّل npx -y @markaestro/mcp الأدوات الإحدى وثلاثين نفسها محليًا.
n8n وMake وZapier
كل نقطة نهاية هي طلب HTTP عادي برمز حامل. لا SDK، لا مراسم توقيع، لا رقصة OAuth للوكيل.
LangChain وLlamaIndex
أدوات REST قياسية. رفع الوسائط بخطوتين هو التدفق الوحيد متعدد الاستدعاءات، وهو سطران فقط.
مهمة cron وcurl
ليس كل وكيل بحاجة إلى إطار عمل. البدء السريع أعلاه تكامل كامل وعملي في أربعة أوامر.