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
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Action to perform on members | |
| No | Email address (for search_by_email) | ||
| userId | No | User ID (for search_by_id/get_details) | |
| projectId | No | Project ID (optional - uses default from environment if not provided) |
Implementation Reference
- src/dooray_mcp/tools/members.py:9-77 (handler)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)
- src/dooray_mcp/server.py:229-255 (schema)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"] } ),
- src/dooray_mcp/server.py:367-369 (registration)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)
- src/dooray_mcp/server.py:21-21 (registration)Import statement for the MembersTool handler class.from .tools.members import MembersTool