subscribe_topic
Manage topic notifications in USCardForum by setting notification levels: mute topics, track replies to your posts, or watch for all new posts.
Instructions
Set your notification level for a topic. REQUIRES AUTHENTICATION.
Args:
topic_id: The topic ID to subscribe to
level: Notification level:
- 0: Muted (no notifications)
- 1: Normal (only if mentioned)
- 2: Tracking (notify on replies to your posts)
- 3: Watching (notify on all new posts)
Must call login() first.
Returns a SubscriptionResult with:
- success: Whether subscription succeeded
- notification_level: The new notification level
Use to:
- Watch topics for all updates (level=3)
- Mute noisy topics (level=0)
- Track topics you've contributed to (level=2)
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| topic_id | Yes | The topic ID to subscribe to | |
| level | No | Notification level: 0=muted, 1=normal, 2=tracking (default), 3=watching |
Implementation Reference
- Primary MCP tool handler for 'subscribe_topic'. Defines input schema with Annotated parameters and docstring. Delegates to DiscourseClient.subscribe_topic after requiring authentication.@mcp.tool() def subscribe_topic( topic_id: Annotated[ int, Field(description="The topic ID to subscribe to"), ], level: Annotated[ int, Field( default=2, description="Notification level: 0=muted, 1=normal, 2=tracking (default), 3=watching", ), ] = 2, ) -> SubscriptionResult: """ Set your notification level for a topic. REQUIRES AUTHENTICATION. Args: topic_id: The topic ID to subscribe to level: Notification level: - 0: Muted (no notifications) - 1: Normal (only if mentioned) - 2: Tracking (notify on replies to your posts) - 3: Watching (notify on all new posts) Must call login() first. Returns a SubscriptionResult with: - success: Whether subscription succeeded - notification_level: The new notification level Use to: - Watch topics for all updates (level=3) - Mute noisy topics (level=0) - Track topics you've contributed to (level=2) """ return get_client().subscribe_topic(topic_id, level=level)
- Pydantic model defining the output schema for the subscribe_topic tool response.class SubscriptionResult(BaseModel): """Result of subscribing to a topic.""" success: bool = Field(..., description="Whether subscription succeeded") notification_level: NotificationLevel = Field( NotificationLevel.NORMAL, description="New notification level" ) class Config: extra = "ignore"
- src/uscardforum/server_tools/__init__.py:52-58 (registration)Imports subscribe_topic from auth.py into server_tools package, making it available for MCP server entrypoint.from .auth import ( login, get_current_session, get_notifications, bookmark_post, subscribe_topic, )
- src/uscardforum/api/auth.py:308-343 (helper)Core API helper: implements the HTTP POST request to Discourse /t/{topic_id}/notifications endpoint to set notification level.def subscribe_topic( self, topic_id: int, level: NotificationLevel = NotificationLevel.TRACKING, ) -> SubscriptionResult: """Set topic notification level (requires auth). Args: topic_id: Topic ID level: Notification level (MUTED, NORMAL, TRACKING, WATCHING) Returns: Subscription result """ self._require_auth() if not isinstance(level, NotificationLevel): level = NotificationLevel(level) token = self._csrf_token or self.fetch_csrf_token() headers = { "Accept": "*/*", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "X-CSRF-Token": token, "X-Requested-With": "XMLHttpRequest", "Referer": f"{self._base_url}/t/{int(topic_id)}", } self._post( f"/t/{int(topic_id)}/notifications", data={"notification_level": str(int(level))}, headers=headers, ) return SubscriptionResult(success=True, notification_level=level)
- src/uscardforum/client.py:556-571 (helper)DiscourseClient wrapper method that delegates subscribe_topic to the AuthAPI instance.def subscribe_topic( self, topic_id: int, level: int = 2, ) -> SubscriptionResult: """Set topic notification level (requires auth). Args: topic_id: Topic ID level: 0=muted, 1=normal, 2=tracking, 3=watching Returns: Subscription result """ return self._auth.subscribe_topic(topic_id, level=NotificationLevel(level))