اربط PostgreSQL بـ Claude Code عبر MCP، وأعدّ حسابًا للقراءة فقط مع التحكم في الأذونات، ليقرأ Claude الـ schema ويكتب الاستعلامات ويحلل البيانات مباشرةً.
بعد ربط قاعدة البيانات، تتغير طريقة عمل Claude Code. لا حاجة لنسخ هياكل الجداول إلى الـ prompt أو شرح أسماء الحقول — Claude يتصل مباشرةً، يقرأ الـ schema بنفسه، يكتب الاستعلامات، ويحلل النتائج.
تستخدم هذه المقالة PostgreSQL كمثال وتشرح العملية كاملةً من الإعداد حتى الاستخدام الفعلي.
الـ @modelcontextprotocol/server-postgres الرسمي يدعم:
قراءة فقط. هذا الـ 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 الترحيل وتحقق من كفاية الفهارس الحالية.
التحكم على مستوى الجدول
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 يستعلم مباشرةً ويعطيك الاستنتاج.