An HR recruitment platform that automates CV classification, intelligent matching between CVs and Job Descriptions, interview scheduling, and communication automation
This server has critical definition quality gaps across both tools. Tool naming violates verb-noun conventions ('downoald_search' appears to be a typo for 'download_search'). Descriptions exist but lack actionable detail for LLM tool selection. Parameter schemas are present with types but descriptions are generic or missing. No output schemas documented. Tool composition violates single-responsibility principle (email_meet creates calendar AND sends emails). Error handling is absent from definitions. The codebase shows hardcoded credentials embedded in tool files (critical security violation), and tools are not properly registered in a formal MCP server structure, they appear to be FastAPI routers without explicit tool registration metadata.
Search Gmail for all emails received after a specified date with a subject containing 'Application_{job_name}'. Returns email message IDs as a JSON object with structure {"message_ids": ["abc123", "def456"]}
Create a Google Calendar event with Google Meet link and send interview invitation or rejection email to candidate with specified details including start/end times, attendees, and job title
Tool naming violates action-verb convention. 'downoald_search' appears to be a typo (should be 'download_search'?) and lacks clear action verb. 'email_meet' combines two distinct actions (create calendar event + send email) which should be split.
Credentials (Google OAuth tokens, API keys, refresh tokens) are hardcoded as string literals in tool implementation files (functions/downoald_search.py, functions/email_meet.py). Secrets must never appear in tool parameters or source code; use server-side secret injection via environment variables or vault.
No output schemas documented for either tool. Tool definitions state what they return as prose ('Returns email message IDs as a JSON object...') but do not provide a formal schema. LLMs cannot reliably parse undocumented output structures.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 29 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 34 | - | v1 |
Parameter descriptions are minimal or missing semantic detail. 'job_description_name' lacks constraint info (format, length, allowed characters). 'days' and 'max_results' have no min/max bounds stated. 'start_iso' and 'end_iso' mention ISO 8601 format in description but provide no example or regex pattern. 'attendees_emails' description is incomplete ('Email address of the candidate', singular, but usage suggests array).
email_meet violates single-responsibility principle. It creates a Google Calendar event AND sends an email (invitation or rejection). This should be split into two tools: create_calendar_event and send_candidate_email. Composition violations force agents to reason about when to call what and prevent reuse of either capability independently.
No error handling or recovery guidance in tool definitions. No mention of what errors are retryable, user-fixable, or fatal. No actionable error messages documented (e.g., 'If email not found, try a broader search with more days'). LLMs cannot plan fallback strategies.
Parameter 'attendees_emails' for email_meet is described as singular ('Email address of the candidate') but the implementation accepts it as a string and passes it to Google Calendar API attendees array. Type mismatch: is it a single email string, a comma-separated string, or an array? Current schema type is 'string', but usage suggests it could be array. This ambiguity will cause LLM errors.
No pagination support documented for downoald_search. The tool accepts max_results parameter but does not return a total count or next_cursor for subsequent queries. If a job receives hundreds of applications, the agent has no way to paginate through them.
Tools are not registered in a formal MCP server structure. They are implemented as FastAPI routers with @router.post() decorators, but no evidence of MCP ServerImplementation, tool registration via server.set_tool_handler(), or proper MCP message framing. This appears to be a FastAPI REST API, not an MCP server.