Skip to main content
Glama
tallpizza

Dooray MCP Server

by tallpizza

dooray_members

Search Dooray members by email or ID, retrieve detailed profiles, and check project membership status for team management.

Instructions

Manage Dooray members - search by email/ID, get member details, check project membership

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
actionYesAction to perform on members
emailNoEmail address (for search_by_email)
userIdNoUser ID (for search_by_id/get_details)
projectIdNoProject ID (optional - uses default from environment if not provided)

Implementation Reference

  • The MembersTool class implements the core handler logic for the 'dooray_members' tool. The 'handle' method dispatches based on the 'action' parameter to specific member management functions using the DoorayClient.
    class MembersTool:
        """Tool for managing Dooray members."""
        
        def __init__(self, dooray_client):
            """Initialize with Dooray client."""
            self.client = dooray_client
        
        async def handle(self, arguments: Dict[str, Any]) -> str:
            """Handle members tool requests.
            
            Args:
                arguments: Tool arguments containing action and parameters
                
            Returns:
                JSON string with results
            """
            action = arguments.get("action")
            if not action:
                return json.dumps({"error": "Action parameter is required"})
            
            try:
                if action == "search_by_email":
                    return await self._search_by_email(arguments)
                elif action == "search_by_id":
                    return await self._search_by_id(arguments)
                elif action == "get_details":
                    return await self._get_details(arguments)
                elif action == "list_project_members":
                    return await self._list_project_members(arguments)
                else:
                    return json.dumps({"error": f"Unknown action: {action}"})
                    
            except Exception as e:
                logger.error(f"Error in members tool: {e}")
                return json.dumps({"error": str(e)})
        
        async def _search_by_email(self, arguments: Dict[str, Any]) -> str:
            """Search member by email address."""
            email = arguments.get("email")
            if not email:
                return json.dumps({"error": "email is required for search_by_email action"})
            
            result = await self.client.search_member_by_email(email)
            return json.dumps(result, ensure_ascii=False)
        
        async def _search_by_id(self, arguments: Dict[str, Any]) -> str:
            """Search member by user ID."""
            user_id = arguments.get("userId")
            if not user_id:
                return json.dumps({"error": "userId is required for search_by_id action"})
            
            result = await self.client.search_member_by_id(user_id)
            return json.dumps(result, ensure_ascii=False)
        
        async def _get_details(self, arguments: Dict[str, Any]) -> str:
            """Get member details."""
            user_id = arguments.get("userId")
            if not user_id:
                return json.dumps({"error": "userId is required for get_details action"})
            
            result = await self.client.get_member_details(user_id)
            return json.dumps(result, ensure_ascii=False)
        
        async def _list_project_members(self, arguments: Dict[str, Any]) -> str:
            """List members of a project."""
            project_id = arguments.get("projectId")
            
            result = await self.client.list_project_members(project_id)
            return json.dumps(result, ensure_ascii=False)
  • Input schema for the 'dooray_members' tool, defining available actions and parameters, registered in the list_tools handler.
    types.Tool(
        name="dooray_members",
        description="Manage Dooray members - search by email/ID, get member details, check project membership",
        inputSchema={
            "type": "object",
            "properties": {
                "action": {
                    "type": "string",
                    "enum": ["search_by_email", "search_by_id", "get_details", "list_project_members"],
                    "description": "Action to perform on members"
                },
                "email": {
                    "type": "string",
                    "description": "Email address (for search_by_email)"
                },
                "userId": {
                    "type": "string",
                    "description": "User ID (for search_by_id/get_details)"
                },
                "projectId": {
                    "type": "string",
                    "description": "Project ID (optional - uses default from environment if not provided)"
                }
            },
            "required": ["action"]
        }
    ),
  • Registration and dispatch point in the main tool handler (@app.call_tool()), where MembersTool is instantiated and invoked for 'dooray_members' calls.
    elif name == "dooray_members":
        tool = MembersTool(dooray_client)
        result = await tool.handle(args)
  • Import statement for the MembersTool handler class.
    from .tools.members import MembersTool

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tallpizza/dooray-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server