ربط Claude Code بقاعدة البيانات: استعلام البيانات الحقيقية بـ MCP

اربط PostgreSQL بـ Claude Code عبر MCP، وأعدّ حسابًا للقراءة فقط مع التحكم في الأذونات، ليقرأ Claude الـ schema ويكتب الاستعلامات ويحلل البيانات مباشرةً.


بعد ربط قاعدة البيانات، تتغير طريقة عمل Claude Code. لا حاجة لنسخ هياكل الجداول إلى الـ prompt أو شرح أسماء الحقول — Claude يتصل مباشرةً، يقرأ الـ schema بنفسه، يكتب الاستعلامات، ويحلل النتائج.

تستخدم هذه المقالة PostgreSQL كمثال وتشرح العملية كاملةً من الإعداد حتى الاستخدام الفعلي.

أي MCP Server نستخدم

الـ @modelcontextprotocol/server-postgres الرسمي يدعم:

  • قراءة schema جميع الجداول (أسماء الحقول، الأنواع، القيود)
  • تنفيذ استعلامات SQL وإعادة النتائج
  • دعم متعدد الـ schemas

قراءة فقط. هذا الـ Server مصمم للاستعلامات فقط ولا ينفذ INSERT أو UPDATE أو DELETE.

التثبيت

npm install -g @modelcontextprotocol/server-postgres

الإعداد

حرّر .claude/settings.json (على مستوى المشروع):

{
  "mcpServers": {
    "db": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-postgres",
        "postgresql://readonly_user:password@localhost:5432/myapp_production"
      ]
    }
  }
}

صيغة سلسلة الاتصال: postgresql://USER:PASSWORD@HOST:PORT/DATABASE

إن أردت تجنب كتابة كلمة المرور في ملف الإعدادات، استخدم متغير البيئة:

{
  "mcpServers": {
    "db": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "DATABASE_URL": "postgresql://readonly_user:password@localhost:5432/myapp_production"
      }
    }
  }
}

إذا كان .claude/settings.json سيُرفع إلى git، تأكد من عدم وجود كلمات مرور بنص صريح. ضع الإعدادات الحساسة في .claude/settings.local.json وأضفه إلى .gitignore.

أنشئ حساب قراءة فقط أولاً

لا تعطِ Claude حسابًا بصلاحيات الكتابة. أنشئ مستخدمًا للقراءة فقط في PostgreSQL:

CREATE USER claude_readonly WITH PASSWORD 'your_password';
GRANT CONNECT ON DATABASE myapp_production TO claude_readonly;
GRANT USAGE ON SCHEMA public TO claude_readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO claude_readonly;
ALTER DEFAULT PRIVILEGES IN SCHEMA public
  GRANT SELECT ON TABLES TO claude_readonly;

للجداول التي لا تريد Claude أن يراها كـ sessions أو audit_logs، لا تمنحها أذونات أو انقلها إلى schema منفصل.

التحقق من الاتصال

أعد تشغيل Claude Code ثم اسأله:

أدرج جميع الجداول في قاعدة البيانات

إن أعاد Claude قائمة بأسماء الجداول بدلاً من "لا أملك وصولاً لقاعدة البيانات"، فالاتصال ناجح.

أمثلة الاستخدام الفعلي

السيناريو الأول: فهم هيكل البيانات

ما العلاقة بين جدولَي users وorders؟ هل هناك قيود على المفاتيح الخارجية؟

Claude يستعلم information_schema مباشرةً ويعطيك شرحًا واضحًا دون أن تلصق الـ schema.

السيناريو الثاني: تحليل البيانات

من المستخدمين المسجلين في آخر 30 يومًا، كم نسبة من أجرى طلبًا واحدًا على الأقل؟ مجمّعًا حسب قناة التسجيل.

Claude يكتب SQL وينفذه ويحلل النتائج. إن أخطأ يصحح نفسه.

السيناريو الثالث: تصحيح الأخطاء

هل توجد طلبات بـ status = 'pending' وcreated_at أكثر من 7 أيام؟ كم عددها وما آخرها؟

السيناريو الرابع: دعم التطوير

أريد إضافة حقل last_login_at لجدول users. اكتب SQL الترحيل وتحقق من كفاية الفهارس الحالية.

التحكم فيما يراه Claude

التحكم على مستوى الجدول

GRANT SELECT ON TABLE users, orders, products TO claude_readonly;

تصفية الحقول الحساسة بـ view

CREATE VIEW users_safe AS
  SELECT id, email, created_at, plan, status FROM users;
GRANT SELECT ON users_safe TO claude_readonly;

الاتصال بقاعدة بيانات بعيدة

استخدم نفقًا SSH:

ssh -L 5433:localhost:5432 [email protected] -N

ثم استخدم المنفذ المحلي في الإعدادات.

ما يتغير فعليًا

أبرز تغيير بعد ربط قاعدة البيانات: لا تحتاج لمقدمات عند مناقشة البيانات. لا شرح للـ schema ولا لأنواع الحقول — فقط قل ما تحتاجه وClaude يبحث بنفسه. مفيد جداً عند تصحيح الأخطاء: بدلاً من الاستعلام ونسخ النتائج ولصقها، تصف المشكلة وClaude يستعلم مباشرةً ويعطيك الاستنتاج.