Postgres MCP: अपने AI एजेंट को डेटाबेस से कनेक्ट करें

Postgres MCP सर्वर की मदद से AI एजेंट Model Context Protocol के ज़रिए PostgreSQL स्कीमा देख सकता है और क्वेरी चला सकता है। आप सर्वर को डेटाबेस कनेक्शन देते हैं; आपका एजेंट टेबल पढ़ने और डेटा से जुड़े सवालों के जवाब देने के लिए उसके टूल्स कॉल करता है।
यह गाइड Postgres MCP Pro, एक अलग डेटाबेस रोल और restricted एक्सेस मोड की मदद से Cursor को एक सैंपल डेटाबेस से जोड़ती है। आखिरी नतीजा जांचना आसान है: एजेंट को दो active प्रोजेक्ट मिलने चाहिए, जिनका कुल मासिक बजट $68 है। अगर वह इन पंक्तियों को बदलने की कोशिश करे, तो उसे फ़ेल होना चाहिए।
डेटाबेस आप Lizard पर Managed Postgres से बना सकते हैं। MCP प्रोसेस आपके कंप्यूटर पर चलता है। यही SQL सेटअप आपके अपने लोकल PostgreSQL इंस्टेंस के साथ भी काम करता है।
Postgres MCP आपके डेटाबेस से कैसे जुड़ता है
एजेंट MCP सर्वर को टूल कॉल भेजता है। सर्वर PostgreSQL से कनेक्ट होकर क्वेरी चलाता है और नतीजा लौटाता है। PostgreSQL यह जांचता है कि कनेक्शन वाले डेटाबेस रोल के पास कौन-सी परमिशन हैं।
हम Postgres MCP Pro का उपयोग करते हैं, जो एक स्वतंत्र ओपन-सोर्स प्रोजेक्ट है। यह स्कीमा की सूची देखने, टेबल की जानकारी पढ़ने और SQL चलाने के टूल्स देता है। इस सेटअप में डेटाबेस Lizard देता है।
Cursor और MCP प्रोसेस के बीच का लोकल कनेक्शन stdio इस्तेमाल करता है। आपका कंप्यूटर डेटाबेस एंडपॉइंट तक पहुंच पाना चाहिए। क्वेरी के नतीजे आपके AI प्रोवाइडर के कॉन्टेक्स्ट में जा सकते हैं, इसलिए इस वॉकथ्रू में काल्पनिक प्रोजेक्ट नाम और बजट इस्तेमाल किए गए हैं।
आपको क्या चाहिए
- नया PostgreSQL इंस्टेंस या अलग से बनाया गया, बाद में हटाया जा सकने वाला डेटाबेस, और ऐसा owner अकाउंट जो डेटाबेस और रोल बना सके।
- आपके कंप्यूटर पर
psql। - uv, जो पिन किया गया Python पैकेज चलाता है।
- Cursor, जिसमें कस्टम MCP सर्वर चालू हों।
हमने SQL और MCP कॉल को PostgreSQL 14.20, Python 3.12.10, postgres-mcp==0.3.0 और mcp==1.30.0 के साथ टेस्ट किया। नीचे दी गई नतीजों की टेबल बताती है कि इन जांचों का दायरा क्या था।
1. सैंपल Postgres डेटाबेस बनाएँ
नए Lizard प्रोजेक्ट में डैशबोर्ड से Managed Postgres जोड़ें। अगर आप पहले से Lizard CLI इस्तेमाल करते हैं और नए प्रोजेक्ट को लिंक कर चुके हैं, तो यह चलाएँ:
lizard add postgresडैशबोर्ड पर होस्ट, पोर्ट, डेटाबेस और क्रेडेंशियल्स मिलते हैं। psql से कनेक्ट करने के लिए Managed Postgres कनेक्शन गाइड देखें। इस सेटअप के लिए owner अकाउंट इस्तेमाल करें; एजेंट को अलग अकाउंट मिलेगा।
psql में एक नया डेटाबेस बनाएँ और उस पर स्विच करें:
CREATE DATABASE mcp_demo;
\connect mcp_demo\connect एक psql कमांड है। अगर आप SQL एडिटर इस्तेमाल करते हैं, तो अगला ब्लॉक चलाने से पहले mcp_demo चुनें। अगर इस नाम का डेटाबेस पहले से मौजूद है, तो कोई दूसरा नाम चुनें और आगे के उदाहरणों में उसे बदल दें।
तीन पंक्तियों वाली एक टेबल बनाएँ:
CREATE SCHEMA demo;
CREATE TABLE demo.projects (
id integer PRIMARY KEY,
name text NOT NULL,
status text NOT NULL CHECK (status IN ('active', 'paused')),
monthly_budget_usd numeric(10, 2) NOT NULL
);
INSERT INTO demo.projects VALUES
(1, 'Atlas', 'active', 49.00),
(2, 'Beacon', 'active', 19.00),
(3, 'Cedar', 'paused', 0.00);ये रकम सिर्फ़ सैंपल डेटा का हिस्सा हैं। ये Lizard की कीमतें नहीं हैं।
2. एजेंट को ऐसा रोल दें जो सैंपल टेबल पढ़ सके
बिना किसी एडमिन प्रिविलेज वाला लॉगिन बनाएँ:
CREATE ROLE mcp_reader LOGIN
NOSUPERUSER NOCREATEDB NOCREATEROLE NOREPLICATION NOINHERIT;फिर पासवर्ड को SQL हिस्ट्री में डाले बिना सेट करने के लिए यह psql कमांड चलाएँ:
\password mcp_readerनीचे दिए गए GRANT नए mcp_demo डेटाबेस के लिए हैं। PUBLIC से किए गए REVOKE उस डेटाबेस को इस्तेमाल करने वाले बाकी रोल पर भी असर डालते हैं, इसलिए यह ब्लॉक किसी मौजूदा साझा ऐप्लिकेशन डेटाबेस में पेस्ट न करें।
REVOKE ALL ON DATABASE mcp_demo FROM PUBLIC;
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
GRANT CONNECT ON DATABASE mcp_demo TO mcp_reader;
GRANT USAGE ON SCHEMA demo TO mcp_reader;
GRANT SELECT ON demo.projects TO mcp_reader;
ALTER ROLE mcp_reader IN DATABASE mcp_demo
SET default_transaction_read_only = on;
ALTER ROLE mcp_reader IN DATABASE mcp_demo
SET statement_timeout = '5s';इससे सिर्फ़ एक टेबल का एक्सेस मिलता है। बाद में बनाई गई किसी भी टेबल के लिए अलग GRANT चाहिए। PostgreSQL सिस्टम कैटलॉग के ज़रिए ऑब्जेक्ट्स के नाम फिर भी दिखा सकता है; पंक्तियों का एक्सेस टेबल परमिशन से कंट्रोल होता है। PostgreSQL का GRANT रेफ़रेंस देखें।
रीड-ओनली डिफ़ॉल्ट गलतियों से बचने में मदद करता है, लेकिन क्लाइंट यह सेटिंग बदल सकता है। इस रोल को demo.projects में लिखने से असल में टेबल के GRANT ही रोकते हैं। हमने जांचा कि डिफ़ॉल्ट बंद करने के बाद भी अपडेट फ़ेल होता है।
3. रीडर कनेक्शन को अपने सोर्स कोड से बाहर सेव करें
नए रोल और mcp_demo डेटाबेस से कनेक्शन URL बनाएँ। होस्ट, पोर्ट और ज़रूरी TLS सेटिंग्स अपने प्रोवाइडर के कनेक्शन निर्देशों से लें। पासवर्ड को URL में डालते समय उसके खास कैरेक्टर percent-encode (URL-encode) करें; PostgreSQL के डॉक्यूमेंटेशन में कनेक्शन URI फ़ॉर्मेट दिया गया है।
TLS वाले होस्टेड एंडपॉइंट के लिए फ़ॉर्मेट यह है:
postgresql://mcp_reader:URL_ENCODED_PASSWORD@DB_HOST:DB_PORT/mcp_demo?sslmode=requiresslmode=require एन्क्रिप्शन को अनिवार्य बनाता है। अगर आपका प्रोवाइडर सर्टिफ़िकेट की पूरी जांच के लिए CA सर्टिफ़िकेट और होस्टनेम देता है, तो उसका verify-full कॉन्फ़िगरेशन इस्तेमाल करें। सर्टिफ़िकेट एरर ठीक करने के लिए होस्ट और ट्रस्ट कॉन्फ़िगरेशन का मेल ज़रूरी है; होस्टेड कनेक्शन पर TLS बंद करके इसे हल न करें।
अपने प्रोजेक्ट की .gitignore में .env.mcp जोड़ें, फिर प्रोजेक्ट रूट में यह फ़ाइल बनाएँ:
DATABASE_URI=postgresql://mcp_reader:URL_ENCODED_PASSWORD@DB_HOST:DB_PORT/mcp_demo?sslmode=requireहर प्लेसहोल्डर की जगह अपने रीडर कनेक्शन की वैल्यू लिखें। नाम DATABASE_URI है: Postgres MCP Pro यही नाम पढ़ता है। Lizard में ऐप्लिकेशन के कनेक्शन वेरिएबल का नाम DATABASE_URL है; सिर्फ़ यह नाम देने से यह MCP सर्वर कॉन्फ़िगर नहीं होगा।
owner कनेक्शन इस फ़ाइल में न रखें। macOS या Linux पर रीडर फ़ाइल का एक्सेस सीमित करें:
chmod 600 .env.mcp4. Cursor में Postgres MCP कॉन्फ़िगर करें
उसी प्रोजेक्ट में .cursor/mcp.json बनाएँ। अगर फ़ाइल में पहले से दूसरे सर्वर हैं, तो postgres-demo को उसके मौजूदा mcpServers ऑब्जेक्ट के अंदर जोड़ें।
{
"mcpServers": {
"postgres-demo": {
"type": "stdio",
"command": "uvx",
"args": [
"--python", "3.12",
"--with", "mcp==1.30.0",
"--from", "postgres-mcp==0.3.0",
"postgres-mcp", "--access-mode=restricted"
],
"envFile": "${workspaceFolder}/.env.mcp"
}
}
}Cursor प्रोजेक्ट-लेवल MCP कॉन्फ़िगरेशन और लोकल stdio सर्वर के लिए envFile सपोर्ट करता है। उसका MCP कॉन्फ़िगरेशन रेफ़रेंस देखें। अगर Cursor को uvx नहीं मिलता, तो कमांड की जगह उसका इंस्टॉल किया गया पूरा पाथ लिखें।
दोनों वर्ज़न पिन ज़रूरी हैं। हमारी जांच में MCP SDK का वर्ज़न तय किए बिना postgres-mcp==0.3.0 इंस्टॉल करने पर mcp==2.2.0 आ गया। इसके बाद सर्वर mcp.server.fastmcp इम्पोर्ट नहीं कर पाया। mcp==1.30.0 के साथ सर्वर शुरू हुआ और नीचे दिए गए टेस्ट पूरे हुए।
डेटाबेस कनेक्शन खोलने से पहले पैकेज का लॉन्च जांचने के लिए यह चलाएँ:
uvx --python 3.12 --with 'mcp==1.30.0' \
--from 'postgres-mcp==0.3.0' postgres-mcp --helpCursor की MCP सेटिंग्स में postgres-demo को चालू या रीस्टार्ट करें। सेटअप जांचते समय टूल अप्रूवल चालू रखें, और किसी कॉल की अनुमति देने से पहले उसके SQL आर्गुमेंट देख लें।
5. टूल्स और जवाब वेरिफ़ाई करें
स्कीमा से जुड़े सवाल से शुरू करें:
Use postgres-demo to inspect the demo schema. List its tables and the columns
of demo.projects. Show the tool results. Do not change the database.सर्वर को list_schemas, list_objects, get_object_details और execute_sql टूल्स देने चाहिए। पुष्टि करें कि एजेंट टूल्स कॉल करता है और टेबल से id, name, status और monthly_budget_usd बताता है।
फिर पूछें:
Using demo.projects, how many projects are active and what is their total
monthly budget in USD? Show the SQL and the database result.इस जवाब के लिए एक क्वेरी यह है:
SELECT
count(*) AS active_projects,
sum(monthly_budget_usd) AS total_budget_usd
FROM demo.projects
WHERE status = 'active';अपेक्षित वैल्यू ये हैं:
| active_projects | total_budget_usd |
|---|---|
| 2 | 68.00 |
आखिर में इस सैंपल टेबल पर लगी रोक जांचें। WHERE false शर्त यह पक्का करती है कि क्वेरी से कोई पंक्ति मेल न खाए:
Use execute_sql to run exactly:
UPDATE demo.projects SET name = name WHERE false;
Report the tool response. Do not retry with another tool or connection.हमारे टेस्ट में restricted मोड ने Error: Error validating query लौटाया। mcp_reader से बने एक अलग डायरेक्ट कनेक्शन ने भी permission denied for table projects लौटाया, जबकि हमने उसका रीड-ओनली डिफ़ॉल्ट बंद कर दिया था। MCP की जांच और डेटाबेस के GRANT, दोनों ने अलग-अलग यह ऑपरेशन रोक दिया।
हमने क्या टेस्ट किया
24 सितंबर 2026 को हमने सैंपल SQL और असली MCP कॉल्स को सिंथेटिक डेटा वाले एक नए लोकल PostgreSQL 14.20 इंस्टेंस पर चलाया। हमने Python 3.12.10, Postgres MCP Pro 0.3.0 और MCP SDK 1.30.0 इस्तेमाल किए।
| जांच | नतीजा |
|---|---|
mcp_reader के रूप में कनेक्ट करें | mcp_demo से कनेक्ट हुआ; रीड-ओनली डिफ़ॉल्ट चालू |
| MCP से स्कीमा, टेबल और कॉलम की सूची देखें | सैंपल स्कीमा और टेबल के फ़ील्ड मिले |
| active प्रोजेक्ट को सीधे और MCP से क्वेरी करें | दोनों तरीकों से 2 प्रोजेक्ट और $68.00 मिले |
| restricted MCP मोड से अपडेट की कोशिश करें | क्वेरी वैलिडेशन के दौरान रोका गया |
| रीड-ओनली डिफ़ॉल्ट बंद करके सीधे अपडेट की कोशिश करें | PostgreSQL की टेबल परमिशन ने रोका |
| ऐसे टेस्ट स्कीमा की टेबल पढ़ें जिसका GRANT नहीं दिया गया | PostgreSQL की स्कीमा परमिशन ने रोका |
| public स्कीमा में टेबल बनाने और टेम्पररी टेबल की प्रिविलेज जांचें | दोनों में से कुछ नहीं मिला |
ये जांचें SQL परमिशन और MCP प्रोटोकॉल को कवर करती हैं। इस टेस्ट के लिए हमने Cursor UI वाला फ़्लो नहीं चलाया और नया Lizard डेटाबेस डिप्लॉय नहीं किया। ऊपर दी गई जांचें अपने एंडपॉइंट पर दोहराएँ; सिर्फ़ MCP का "connected" इंडिकेटर यह साबित नहीं करता कि डेटाबेस टूल्स काम कर रहे हैं।
Postgres MCP के आम कनेक्शन एरर ठीक करें
| लक्षण | क्या जांचें |
|---|---|
No module named mcp.server.fastmcp | Postgres MCP Pro 0.3.0 के साथ टेस्ट किया गया mcp==1.30.0 पिन इस्तेमाल करें। आर्गुमेंट बदलने के बाद सर्वर रीस्टार्ट करें। |
uvx नहीं मिला | uv इंस्टॉल करें, फिर ज़रूरत हो तो Cursor में uvx का पूरा पाथ लिखें। |
| डेटाबेस URL नहीं मिला | पुष्टि करें कि .env.mcp में DATABASE_URI है और envFile सही प्रोजेक्ट की ओर पॉइंट करता है। |
| पासवर्ड ऑथेंटिकेशन फ़ेल | mcp_reader का पासवर्ड इस्तेमाल करें, URL एन्कोडिंग जांचें और एंडपॉइंट की पुष्टि करें। |
| कनेक्शन टाइम आउट हुआ या रिफ़्यूज़ हुआ | होस्ट, पोर्ट, नेटवर्क एक्सेस और यह जांचें कि डेटाबेस चल रहा है या नहीं। प्राइवेट सर्विस का होस्टनेम आपके लैपटॉप से शायद रिज़ॉल्व न हो। |
| सर्टिफ़िकेट वेरिफ़िकेशन फ़ेल | प्रोवाइडर के होस्टनेम, CA सर्टिफ़िकेट और TLS सेटिंग्स से मिलान करें। |
| स्कीमा या टेबल के लिए permission denied | सही स्कीमा पर USAGE और सही टेबल पर SELECT जांचें। सिर्फ़ उतना एक्सेस दें जितना उदाहरण को चाहिए। |
| टेबल की सूची खाली है | डेटाबेस का नाम और स्कीमा जांचें। यह गाइड टेबल को demo में रखती है, public में नहीं। |
क्या आपको PostgreSQL एक्सटेंशन चाहिए?
इस गाइड की स्कीमा और डेटा क्वेरी के लिए किसी अतिरिक्त एक्सटेंशन की ज़रूरत नहीं है। Postgres MCP Pro में परफ़ॉर्मेंस टूल्स भी हैं, जिनकी ज़रूरतें अलग हैं।
उसका टॉप-क्वेरी एनालिसिस pg_stat_statements इस्तेमाल करता है। हाइपोथेटिकल इंडेक्स एनालिसिस hypopg इस्तेमाल करता है। उपलब्धता, सर्वर कॉन्फ़िगरेशन और रोल की परमिशन, सब मायने रखती हैं; एक्सटेंशन बनाने के लिए owner को कुछ करना पड़ सकता है या सर्वर में बदलाव करना पड़ सकता है। ये टूल्स इस्तेमाल करने से पहले प्रोजेक्ट की एक्सटेंशन से जुड़ी ज़रूरतें देखें।
स्कीमा और SELECT वाली जांचों से शुरू करें। किसी ट्यूनिंग टूल में एक्सटेंशन से जुड़ी गड़बड़ी का अपने आप में यह मतलब नहीं कि बेसिक MCP कनेक्शन टूटा हुआ है।
आम सवाल
क्या Postgres MCP और Lizard MCP एक ही हैं?
नहीं। यह उदाहरण PostgreSQL डेटाबेस को क्वेरी करने के लिए Postgres MCP Pro का उपयोग करता है। वह डेटाबेस Managed Postgres देता है। कनेक्टर एक अलग प्रोजेक्ट है।
क्या मैं कोई दूसरा AI एजेंट इस्तेमाल कर सकता हूँ?
हाँ, अगर उसका क्लाइंट stdio पर लोकल MCP सर्वर सपोर्ट करता है। वही पिन किया गया प्रोसेस, रीडर क्रेडेंशियल और restricted मोड इस्तेमाल करें, फिर उस क्लाइंट के कॉन्फ़िगरेशन फ़ॉर्मेट के हिसाब से सेटअप करें। ऊपर दिया गया JSON Cursor के लिए है।
क्या restricted मोड डेटाबेस परमिशन की जगह ले लेता है?
दोनों इस्तेमाल करें। restricted मोड MCP सर्वर में क्वेरी की जांच करता है। PostgreSQL के GRANT तय करते हैं कि कनेक्शन वाला रोल क्या कर सकता है, चाहे वह किसी दूसरे क्लाइंट से कनेक्ट हो। माइग्रेशन और एडमिन काम के लिए owner अकाउंट अलग रखें।
क्या यह मेरे लिए टेबल बनाएगा या माइग्रेशन चलाएगा?
यह सेटअप रीडर को सिर्फ़ सैंपल टेबल का एक्सेस देता है। यह आपके ऐप्लिकेशन का स्कीमा न बना सकता है, न बदल सकता है। रिव्यू किए गए माइग्रेशन अपनी सामान्य ऐप्लिकेशन डिप्लॉयमेंट प्रक्रिया से चलाएँ।
आगे: डेटाबेस को अपने ऐप से कनेक्ट करें
जब एजेंट सैंपल स्कीमा देखकर अपेक्षित जवाब देने लगे, तो डेवलपमेंट के दौरान डेटाबेस से जुड़े सवालों के लिए आपके पास काम करने वाला आधार तैयार है। टेबल जोड़ते समय एजेंट के रीडर क्रेडेंशियल को अपने ऐप्लिकेशन के क्रेडेंशियल से अलग रखें।
अपने प्रोजेक्ट के लिए Managed Postgres बनाएँ, डेटाबेस कनेक्शन गाइड देखें, या Cursor ऐप डिप्लॉयमेंट का उदाहरण आगे पढ़ें। कई क्लाइंट्स के बीच साझा MCP सर्विस डिप्लॉय करने के लिए अलग रिमोट MCP सर्वर गाइड देखें।
AI के साथ बिल्ड करें। Lizard के साथ शिप करें।
लाइव जाने के लिए आपको प्लेटफ़ॉर्म टीम की ज़रूरत नहीं है। आपका पूरा क्लाउड, बस एक CLI कमांड की दूरी पर।
- सर्विसेज़
- —
- ऐडऑन
- —
- डिप्लॉयमेंट्स
- —
- सैंडबॉक्स स्टार्ट्स
- —