search_projects
Search for WeWork projects by name using specified text and retrieve a list of matching projects, limited to a customizable number of results.
Instructions
Tìm kiếm dự án theo tên
Args:
search_text: Text để tìm kiếm trong tên dự án
limit: Số lượng kết quả tối đa (default: 10)
Returns:
Danh sách các dự án phù hợp
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| search_text | Yes |
Implementation Reference
- wework_mcp_server.py:57-84 (handler)MCP tool handler for 'search_projects'. Calls WeWorkClient.search_projects and formats the response with success status and metadata.@mcp.tool() def search_projects(search_text: str, limit: int = 10) -> Dict[str, Any]: """ Tìm kiếm dự án theo tên Args: search_text: Text để tìm kiếm trong tên dự án limit: Số lượng kết quả tối đa (default: 10) Returns: Danh sách các dự án phù hợp """ try: if not wework_client: return {'error': 'WeWork client not initialized'} logger.info(f"Searching projects with text: {search_text}") results = wework_client.search_projects(search_text=search_text, limit=limit) return { 'success': True, 'search_text': search_text, 'results': results, 'count': len(results) } except Exception as e: logger.error(f"Error in search_projects: {e}") return {'error': str(e), 'success': False}
- wework_mcp_server.py:58-68 (schema)Input schema defined by function parameters (search_text: str, limit: int=10) and output as Dict[str, Any]. Docstring provides description.def search_projects(search_text: str, limit: int = 10) -> Dict[str, Any]: """ Tìm kiếm dự án theo tên Args: search_text: Text để tìm kiếm trong tên dự án limit: Số lượng kết quả tối đa (default: 10) Returns: Danh sách các dự án phù hợp """
- wework_mcp_server.py:57-57 (registration)Tool registration via @mcp.tool() decorator on the handler function.@mcp.tool()
- data/wework_client.py:270-302 (helper)Core search logic in WeWorkClient class that fetches projects and matches by name using substring and similarity scoring.def search_projects(self, search_text: str, limit: int = 10) -> List[Dict]: """ Tìm kiếm projects theo tên """ projects = self.fetch_projects() if not projects: return [] # Tìm projects phù hợp matches = [] for project in projects: project_name = project['name'].lower() search_lower = search_text.lower() # Exact match hoặc partial match if search_lower in project_name or project_name in search_lower: matches.append({ 'project': project, 'similarity': 1.0 if search_lower == project_name else 0.8 }) else: # Sử dụng find_best_project_match _, similarity = self.find_best_project_match(search_text, [project]) if similarity > 0.3: matches.append({ 'project': project, 'similarity': similarity }) # Sắp xếp theo similarity và giới hạn kết quả matches.sort(key=lambda x: x['similarity'], reverse=True) return [match['project'] for match in matches[:limit]]