sbarbase
المحتويات

وكلاء الذكاء الاصطناعي والواجهة البرمجية

يستطيع وكيل ذكاء اصطناعي، مثل Claude Code أو Cursor أو Codex، أن يعمل على هذا الخادم كما يعمل على Supabase. افتح مجلد مشروعك وقل له "انشر هذا التطبيق على Sbarbase"، فيستطيع أن:

يتصل الوكيل برمز وصول شخصي (access token) وبنقطة MCP في الخادم، وهي تشغّل خادم MCP الرسمي من Supabase نفسه.

1. أنشئ رمز وصول

  1. افتح Access tokens في لوحة الإدارة (تحت Workspace).
  2. أعطِ الرمز اسمًا، مثل "Claude Code على حاسوبي".
  3. اختر ما يستطيع الوصول إليه:
    • كل ما تصل إليه أنت؛
    • منظمة واحدة؛
    • مشروعًا واحدًا.
  4. اختر "للقراءة فقط" إن أردت أن يكتفي الوكيل بالاطلاع. الرمز المخصص للقراءة يشغّل SQL للقراءة فقط ولا يستطيع تغيير شيء.
  5. اختر متى تنتهي صلاحيته، ثم اضغط 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 (الأمان: الجداول العامة التي لم يُفعَّل فيها أمان مستوى الصفوف)

ولا يحصل الرمز المخصص للقراءة إلا على أدوات القراءة.

ما لم يتوفر بعد:

كيف يبقى ذلك آمنًا

ما يكتبه الوكيل ليس مراجعة. راجع ما غيّره قبل أن تعتمد عليه، كما تفعل مع أي تغيير آلي. وأعطِ كل وكيل رمزه الخاص، لتستطيع إلغاء واحد وحده.

الواجهة المتوافقة مع 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.com
export 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

الحدود

عدّل على GitHub