دسترسی به resources (Accessing resources)
عنوان اصلی: Accessing resources
هدف یادگیری: مصرف resources از سمت client: list، read، subscribe برای updateها.
مفاهیم کلیدی: resources/list، resources/read، resources/subscribe، notifications/resources/updated، notifications/resources/list_changed، pagination.
از سمت client، دسترسی به resources متقارن با دسترسی به tools است. list_resources() را برای enumerate صدا بزنید، read_resource(uri) برای fetch محتوا، subscribe_resource(uri) برای دریافت notification وقتی یک resource خاص تغییر میکند. هم list-changed و هم per-resource updated باید توسط client سیمکشی شوند اگر host بهروزرسانی زنده میخواهد.
Subscriptionها اختیاری هستند — server فقط در صورتی پشتیبانی میکند که در init مقدار resources.subscribe: true را اعلام کرده باشد. اگر نکرده باشد، صدا زدن resources/subscribe یک خطای JSON-RPC برمیگرداند.
مثال عملی — Python client
from pydantic import AnyUrl
resources = await session.list_resources()
for r in resources.resources:
print(r.uri, r.name, r.mimeType)
content = await session.read_resource(AnyUrl("file://documents/readme.md"))
for c in content.contents:
print(c.uri, "->", c.text if hasattr(c, "text") else "[binary]")
# Subscribe for change notifications
await session.subscribe_resource(AnyUrl("file://documents/readme.md"))
# session will dispatch notifications/resources/updated to your handler
مثال عملی — notification خام روی wire
{ "jsonrpc": "2.0", "method": "notifications/resources/updated",
"params": { "uri": "file:///project/src/main.rs" } }
اشتباهات رایج
- subscribe بدون چک کردن capability — server ممکن است پشتیبانی نکند.
- paginate نکردن
resources/list— serverهای بزرگ باnextCursorپاسخ میدهند و client باید loop کند. - فراموش کردن unsubscribe وقتی host view resource را میبندد.