पाठ 20 / 25
Least Privilege और Approvals
Server credentials का दायरा संकरा रखें और ख़तरनाक tools पर इंसान को शामिल रखें।
संकरा, read-only, मंज़ूर
Server को ऐसा credential दें जो सिर्फ़ उतना कर सके जितना उसके tools को चाहिए, जैसे read-only database user। Read और write tools अलग रखें ताकि reads खुलकर और writes मंज़ूरी के साथ चलें। Hosts tool calls पर मंज़ूरी prompt दिखाते हैं; click करने से पहले उसे पढ़ें, और विनाशकारी tools पर "always allow" न लगाएँ।
Read और write अलग करें
दो छोटे tools को सुरक्षित करना, दोनों काम करने वाले एक tool से आसान है। Write tool पर रोक रखी जा सकती है जबकि read tool खुलकर चलता है। db आपके database helper का प्रतीक है।
@mcp.tool()
def get_order(order_id: int) -> dict:
"""Read one order. Read-only."""
return db.query_one("SELECT * FROM orders WHERE id = ?", order_id)
@mcp.tool()
def cancel_order(order_id: int) -> str:
"""Cancel an order. Changes data; requires approval."""
db.execute("UPDATE orders SET status = 'cancelled' WHERE id = ?", order_id)
return "cancelled"Queries को parameterise करें
उदाहरण में ? placeholders हैं। Model के दिए strings जोड़कर SQL कभी न बनाएँ, वरना model (या उसके पीछे हमलावर) मनमाना SQL चला सकता है।
त्वरित जाँच: Read और write को अलग tools में क्यों बाँटें?
- ताकि reads खुलकर चलें और writes को मंज़ूरी चाहिए
- दो tools हमेशा तेज़ होते हैं
- MCP संयुक्त tools मना करता है
- इससे authentication की ज़रूरत ख़त्म होती है
Answer
ताकि reads खुलकर चलें और writes को मंज़ूरी चाहिए — अलग tools अलग जोखिम स्तरों के लिए अलग permissions और मंज़ूरी नियम देने देते हैं।