وكلاء الذكاء الاصطناعي والواجهة البرمجية
يستطيع وكيل ذكاء اصطناعي، مثل Claude Code أو Cursor أو Codex، أن يعمل على هذا الخادم كما يعمل على Supabase. افتح مجلد مشروعك وقل له "انشر هذا التطبيق على Sbarbase"، فيستطيع أن:
- ينشئ المشروع؛
- يشغّل الترحيلات؛
- ينشر دوال Edge Functions؛
- يضبط أسرارها؛
- يقرأ السجلات؛
- يكتب إعدادات التطبيق.
يتصل الوكيل برمز وصول شخصي (access token) وبنقطة MCP في الخادم، وهي تشغّل خادم MCP الرسمي من Supabase نفسه.
1. أنشئ رمز وصول
- افتح Access tokens في لوحة الإدارة (تحت Workspace).
- أعطِ الرمز اسمًا، مثل "Claude Code على حاسوبي".
- اختر ما يستطيع الوصول إليه:
- كل ما تصل إليه أنت؛
- منظمة واحدة؛
- مشروعًا واحدًا.
- اختر "للقراءة فقط" إن أردت أن يكتفي الوكيل بالاطلاع. الرمز المخصص للقراءة يشغّل SQL للقراءة فقط ولا يستطيع تغيير شيء.
- اختر متى تنتهي صلاحيته، ثم اضغط Create token وانسخه. لا يظهر إلا مرة واحدة.
الرمز هو sbp_ يتبعها 40 حرفًا، أي بصيغة رمز الوصول الشخصي في Supabase. يعمل الرمز باسمك وبدورك في كل منظمة. رمز المستخدم الذي دوره "مشاهد" يعرض المنظمات والمشاريع والدوال، أما SQL ومفاتيح API وشيفرة الدوال وكل تغيير فتحتاج مالكًا أو مشرفًا. ولا يحتفظ صباربيز إلا ببصمته.
2. اربط الوكيل
العنوان هو عنوان لوحة الإدارة يتبعه /mcp، مثل https://console.example.com/mcp.
Claude Code: نفّذ هذا الأمر مرة واحدة في الطرفية:
claude mcp add --transport http sbarbase https://console.example.com/mcp --header "Authorization: Bearer sbp_..."Cursor (.cursor/mcp.json)، وVS Code (.vscode/mcp.json، مع "type": "http")، وغيرهما مما يقبل عنوانًا وترويسات:
{
"mcpServers": {
"sbarbase": {
"url": "https://console.example.com/mcp",
"headers": {"Authorization": "Bearer ${env:SBARBASE_ACCESS_TOKEN}"}
}
}
}Codex (~/.codex/config.toml):
[mcp_servers.sbarbase]
url = "https://console.example.com/mcp"
bearer_token_env_var = "SBARBASE_ACCESS_TOKEN"لا تضع الرمز في ملفات تُرفع إلى المستودع. الأمثلة أعلاه تقرؤه من متغير بيئة حيث يسمح العميل بذلك.
3. اطلب
في مجلد أي مشروع، قل مثلًا: "انشر هذا التطبيق على Sbarbase: أنشئ مشروعًا، وطبّق الترحيلات في supabase/migrations، وانشر الدوال في supabase/functions، واكتب العنوان والمفتاح العام في .env". ومهارة صباربيز تعلّم Claude Code هذه الخطوات.
ما يستطيع الوكيل فعله
الأدوات هي أدوات Supabase نفسها، من خادم MCP الرسمي:
| المجموعة | الأدوات |
|---|---|
| الحساب | list_organizations، get_organization، list_projects، get_project، create_project (بعد get_cost وconfirm_cost، والكلفة هنا صفر دائمًا، والمنطقة التي تطلبها تُتجاهل) |
| قاعدة البيانات | list_tables، list_extensions، list_migrations، apply_migration، execute_sql |
| Edge Functions | list_edge_functions، get_edge_function، deploy_edge_function |
| التطوير | get_project_url (عنوان المشروع على هذا الخادم)، get_publishable_keys (وبرمز يستطيع الكتابة تنشئ مفتاحًا اسمه default إن لم يكن للمشروع مفتاح يمكن عرضه) |
| التشخيص | get_logs (سجلات الطلبات وAuth وStorage وRealtime وEdge Functions)، get_advisors (الأمان: الجداول العامة التي لم يُفعَّل فيها أمان مستوى الصفوف) |
ولا يحصل الرمز المخصص للقراءة إلا على أدوات القراءة.
ما لم يتوفر بعد:
- توليد أنواع TypeScript. استعمل
supabase gen types typescript --db-urlمع سلسلة الاتصال بقاعدة البيانات. - الفروع وإيقاف المشاريع مؤقتًا وحذفها. احذف المشروع من لوحة الإدارة.
- إعدادات Storage.
كيف يبقى ذلك آمنًا
- SQL. يعمل بحساب المطوّر الخاص بالبيئة، وهو حساب الاتصال بقاعدة البيانات نفسه: وصول كامل إلى قاعدة تلك البيئة وحدها، دون صلاحيات المدير العام، ودون الوصول إلى بيئة أخرى. ويستطيع إنشاء مخططات خاصة به، لكن ليس باسم تستخدمه المنصة (الاتصال بقاعدة البيانات). وإن كان الوصول إلى قاعدة البيانات مغلقًا، فأول طلب SQL قد يغيّر شيئًا يفتحه ثم يطلب المحاولة بعد دقيقة، أما طلب القراءة فلا يفتحه أبدًا. وللبيئة التي كان الوصول فيها مفعّلًا قبل 0.5.0، أوقفه ثم شغّله مرة واحدة من لوحة الإدارة، لتحصل على مخطط سجل الترحيلات.
- رموز القراءة فقط. يعمل SQL هنا للقراءة فقط على الخادم نفسه، أيًّا كان ما يطلبه الوكيل. يُنفَّذ عبارةً واحدة داخل معاملة للقراءة فقط تُلغى دائمًا، فلا يتغير أي شيء من البيانات، ولا تستطيع
COMMIT; ...الخروج منها (الدليل). لكنه ما زال يعمل بحساب المطوّر، فتستطيع العبارة الواحدة ما يستطيعه ذلك الحساب خارج البيانات: إلغاء جلسات قاعدة بيانات هذه البيئة نفسها، أو حجز قفل حتى المهلة البالغة 130 ثانية. ويستطيع تشغيلَ SQL رمزُ القراءة الخاص بالمالكين والمشرفين، لا المشاهدين. - التغييرات. يمر كل تغيير عبر مسارات لوحة الإدارة نفسها، بفحوص الأدوار نفسها وسجل التدقيق نفسه، ويظهر فيه باسمك.
- انتهاء الرمز. تتوقف الطلبات الجديدة فورًا حين تلغيه، أو حين تنتهي صلاحيته، أو حين يُعاد تعيين كلمة مرورك من الخادم (إعداد المشغّل)، أو حين تتغير سياسة المصادقة الثنائية في التثبيت. أما الاستعلام الذي بدأ فيكمل أو يبلغ مهلته. ولا ينتهي الرمز حين تسجّل الخروج من لوحة التحكم، ولا حين تنتهي جلستك فيها فتُخرجك تلقائيًا. قبل الإصدار 0.5.13 كان كلاهما ينهيه، فإن توقف رمز أنشأته من قبل فأنشئ رمزًا جديدًا مكانه. وإن أُزيلت عضوية أو خُفّض دور، طُبّق ذلك من الطلب التالي.
- التدقيق. يُسجَّل في سجل النشاط كل ترحيل وكل SQL قد يغيّر البيانات، مع معرّف الرمز وبصمة للاستعلام، دون الاستعلام نفسه.
- ما لا يستطيعه الرمز. لا ينشئ رموزًا ولا يعرض قائمتها ولا يلغيها، ولا يغيّر الأعضاء ولا إعدادات تسجيل الدخول ولا الخادم.
- حد الطلبات. لكل رمز 300 طلب في الدقيقة.
ما يكتبه الوكيل ليس مراجعة. راجع ما غيّره قبل أن تعتمد عليه، كما تفعل مع أي تغيير آلي. وأعطِ كل وكيل رمزه الخاص، لتستطيع إلغاء واحد وحده.
الواجهة المتوافقة مع Supabase
يعمل الرمز نفسه مع أجزاء واجهة الإدارة في Supabase التي تستعملها الأدوات، على https://console.example.com/v1/...:
curl -H "Authorization: Bearer $SBARBASE_ACCESS_TOKEN" https://console.example.com/v1/projects| واجهة Supabase | على صباربيز |
|---|---|
GET /v1/organizations، /v1/organizations/{slug} |
منظماتك |
GET /v1/projects، /v1/projects/{ref}، POST /v1/projects |
كل بيئة "مشروع" بلغة Supabase: ref من 20 حرفًا، وapi_url عنوانها هنا. وPOST ينشئ مشروعًا مع بيئة الإنتاج الخاصة به |
GET وPOST /v1/projects/{ref}/api-keys، وDELETE .../api-keys/{id} |
مفاتيح API. قيمة api_key للمفتاح العام تُقرأ دائمًا، أما المفتاح السري فلا يظهر إلا عند إنشائه |
POST /v1/projects/{ref}/database/query |
SQL: {query, parameters?, read_only?} |
GET وPOST /v1/projects/{ref}/database/migrations |
سجل الترحيلات في supabase_migrations.schema_migrations، كما يحفظه Supabase CLI |
GET /v1/projects/{ref}/functions، .../functions/{slug}، .../functions/{slug}/body، POST .../functions/deploy?slug=، DELETE .../functions/{slug} |
Edge Functions |
GET وPOST وDELETE /v1/projects/{ref}/secrets |
أسرار الدوال، تُعرض بأسمائها فقط |
GET /v1/projects/{ref}/analytics/endpoints/logs، /advisors/security، /advisors/performance |
السجلات والتنبيهات |
وأي طلب آخر يُجاب بـ 404 أو 501 مع رسالة توضّح السبب.
خادم MCP الرسمي من Supabase على جهازك
يمكن أيضًا تشغيل خادم MCP من Supabase على جهازك وتوجيهه إلى هذا الخادم:
npx -y @supabase/mcp-server-supabase@latest --api-url https://console.example.com --access-token sbp_...يعمل، مع فروق: أداته get_project_url تذكر نطاقًا من نطاقات supabase بدل هذا الخادم، ويعرض أداة لاستعلامات سجلات ClickHouse وتنبيهات صحة لا يجيب عنها هذا الخادم. أما النقطة المستضافة أعلاه فتعطي العنوان الصحيح والأدوات التي تعمل فقط، فهي الأفضل.
Supabase CLI
يتصل Supabase CLI بهذا الخادم عبر ملف إعداد (profile):
name: sbarbase
api_url: https://console.example.com
dashboard_url: https://console.example.com
project_host: console.example.comexport SUPABASE_ACCESS_TOKEN=sbp_...
supabase --profile ./sbarbase-profile.yaml projects list
supabase --profile ./sbarbase-profile.yaml functions deploy hello --project-ref <ref> --use-api
supabase --profile ./sbarbase-profile.yaml secrets set STRIPE_KEY=... --project-ref <ref>جُرّبت هذه الأوامر الثلاثة على خادم حقيقي. يحتاج functions deploy إلى --use-api، فبدونه يجمّع CLI الدالة بـ Docker ويرفعها بصيغة لا يقرؤها هذا الخادم. أما الأوامر التي تتصل بقاعدة البيانات عبر اسم مضيف المشروع، مثل db push --linked، فلا تعمل؛ وللترحيلات راجع الوصول إلى قاعدة البيانات.
مهارة صباربيز لـ Claude Code
في المستودع مهارة تشرح لـ Claude Code ما يعنيه "انشر على Sbarbase": ترتيب الخطوات، وأين يكتب العنوان والمفتاح، وما يتحقق منه بعد ذلك. انسخها مرة واحدة:
mkdir -p ~/.claude/skills/sbarbase && curl -fsSL https://raw.githubusercontent.com/M7MMAD-OMAR/sbarbase/main/deploy/agent-skill/sbarbase/SKILL.md -o ~/.claude/skills/sbarbase/SKILL.mdالحدود
- الموصلات المستضافة في claude.ai وChatGPT تحتاج OAuth، ولا يقدّمه صباربيز بعد. استعمل عملاء يقبلون ترويسة: Claude Code وCursor وVS Code وCodex وGemini CLI، وواجهتي Claude وOpenAI البرمجيتين.
- يعمل طلب SQL الواحد 120 ثانية على الأكثر، ويعيد 5 MiB على الأكثر.
- تُسجَّل تغييرات الوكيل عبر مسارات لوحة الإدارة باسمك أنت، أما SQL والترحيلات فتحمل معرّف الرمز أيضًا.
- الترحيل الذي يطبّقه وكيل يأخذ وقت تطبيقه رقمًا لإصداره، كما في Supabase، لا الوقت المكتوب في اسم ملفه في المستودع. ولذلك لا يطابق السجل أسماء الملفات في المستودع، بل يسجّل ما طُبّق ومتى.