|
""" |
|
Service for managing Trello cards in MCP server. |
|
""" |
|
|
|
from typing import Any, Dict, List |
|
|
|
from pmcp.mcp_server.trello_server.models import TrelloCard |
|
from pmcp.mcp_server.trello_server.utils.trello_api import TrelloClient |
|
|
|
|
|
class CardService: |
|
""" |
|
Service class for managing Trello cards. |
|
""" |
|
|
|
def __init__(self, client: TrelloClient): |
|
self.client = client |
|
|
|
async def get_card(self, card_id: str) -> TrelloCard: |
|
"""Retrieves a specific card by its ID. |
|
|
|
Args: |
|
card_id (str): The ID of the card to retrieve. |
|
|
|
Returns: |
|
TrelloCard: The card object containing card details. |
|
""" |
|
response = await self.client.GET(f"/cards/{card_id}") |
|
return TrelloCard(**response) |
|
|
|
async def get_cards(self, list_id: str) -> List[TrelloCard]: |
|
"""Retrieves all cards in a given list. |
|
|
|
Args: |
|
list_id (str): The ID of the list whose cards to retrieve. |
|
|
|
Returns: |
|
List[TrelloCard]: A list of card objects. |
|
""" |
|
response = await self.client.GET(f"/lists/{list_id}/cards") |
|
return [TrelloCard(**card) for card in response] |
|
|
|
async def create_card( |
|
self, list_id: str, name: str, desc: str | None = None |
|
) -> TrelloCard: |
|
"""Creates a new card in a given list. |
|
|
|
Args: |
|
list_id (str): The ID of the list to create the card in. |
|
name (str): The name of the new card. |
|
desc (str, optional): The description of the new card. Defaults to None. |
|
|
|
Returns: |
|
TrelloCard: The newly created card object. |
|
""" |
|
data = {"name": name, "idList": list_id} |
|
if desc: |
|
data["desc"] = desc |
|
response = await self.client.POST("/cards", data=data) |
|
return TrelloCard(**response) |
|
|
|
async def update_card(self, card_id: str, **kwargs) -> TrelloCard: |
|
"""Updates a card's attributes. |
|
|
|
Args: |
|
card_id (str): The ID of the card to update. |
|
**kwargs: Keyword arguments representing the attributes to update on the card. |
|
|
|
Returns: |
|
TrelloCard: The updated card object. |
|
""" |
|
response = await self.client.PUT(f"/cards/{card_id}", data=kwargs) |
|
return TrelloCard(**response) |
|
|
|
async def delete_card(self, card_id: str) -> Dict[str, Any]: |
|
"""Deletes a card. |
|
|
|
Args: |
|
card_id (str): The ID of the card to delete. |
|
|
|
Returns: |
|
Dict[str, Any]: The response from the delete operation. |
|
""" |
|
return await self.client.DELETE(f"/cards/{card_id}") |
|
|