HR-Assist
Sends welcome emails with credentials via Gmail SMTP using an App Password.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@HR-AssistOnboard new employee Alice under manager Bob"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
š¤ HR-Assist ā Agentic AI HR Helpdesk
HR-Assist is an Agentic AI system that helps HR teams automate routine workflows using Claude Desktop as the MCP client and a custom Python MCP server as the backend.
This project demonstrates end-to-end automation of the employee onboarding process ā tasks that typically require multiple manual steps are handled by the AI agent in a single prompt.
⨠What It Does
Task | Automated? |
Add employee to HRMS | ā |
Send welcome email with credentials | ā |
Notify the manager | ā |
Raise tickets for laptop, ID card & equipment | ā |
Schedule introductory meeting | ā |
Leave management | ā |
Ticket tracking & updates | ā |
Related MCP server: HR-ASSIST
šļø Architecture
āāāāāāāāāāāāāāāāāāāāāāā MCP Protocol āāāāāāāāāāāāāāāāāāāāāāā
ā ā āāāāāāāāāāāāāāāāāāāāāāāāāāāŗ ā ā
ā Claude Desktop ā ā HR-Assist Server ā
ā (MCP Client) ā ā (Python + uv) ā
ā ā ā ā
āāāāāāāāāāāāāāāāāāāāāāā āāāāāāāāāāāāāāāāāāāāāāā
ā
āāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāāāāā
ā¼ ā¼ ā¼
employee_manager leave_manager ticket_manager
meeting_manager schemas utilsMCP Client ā Claude Desktop
MCP Server ā This codebase (
server.py+hrms/modules)Email ā SMTP via Gmail App Password
š Project Structure
HR_helpdesk/
ā
āāā hrms/
ā āāā __init__.py
ā āāā employee_manager.py # Add & fetch employee logic
ā āāā leave_manager.py # Leave apply, balance, history
ā āāā meeting_manager.py # Schedule & fetch meetings
ā āāā ticket_manager.py # Create & update tickets
ā āāā schemas.py # Pydantic data models
ā
āāā server.py # MCP server entry point
āāā utils.py # Shared utility functions
āāā emails.py # Email sending logic (SMTP)
āāā pyproject.toml # Project config (uv)
āāā sample.env # Environment variable template
āāā README.mdāļø Setup Instructions
Prerequisites
Claude Desktop installed
uv installed
Gmail account with App Password enabled
1. Clone the Repository
git clone https://github.com/saibalajijammu/HR_helpdesk.git
cd HR_helpdesk2. Install Dependencies
uv init
uv add mcp[cli]3. Set Up Environment Variables
cp sample.env .envEdit .env and fill in:
CB_EMAIL=your_email@gmail.com
CB_EMAIL_PWD=your_gmail_app_password4. Configure Claude Desktop
Open your claude_desktop_config.json file and add the following:
Location of config file:
Windows:
%APPDATA%\Claude\claude_desktop_config.jsonMac:
~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"hr-assist": {
"command": "C:\\Users\\<your-username>\\.local\\bin\\uv",
"args": [
"--directory",
"<full-path-to-project>\\HR_helpdesk",
"run",
"server.py"
],
"env": {
"CB_EMAIL": "YOUR_EMAIL",
"CB_EMAIL_PWD": "YOUR_APP_PASSWORD"
}
}
}
}Replace
<your-username>and<full-path-to-project>with your actual values.
5. Restart Claude Desktop
After saving the config, fully restart Claude Desktop. You should see hr-assist appear as a connected MCP server.
š¬ Usage
Option 1 ā Quick Onboarding via UI
Click the
+icon in Claude DesktopSelect
Add from hr-assistFill in the employee details when prompted
Option 2 ā Custom Prompt (Recommended)
Just type a natural language prompt like:
Onboard a new employee named Priya Mehta under manager Raj Kumar.The agent will automatically:
ā Add her to the HRMS
ā Send a welcome email
ā Notify her manager
ā Raise tickets for laptop, ID card & equipment
ā Schedule an intro meeting
š Environment Variables
Variable | Description |
| Your Gmail address used for sending emails |
| Gmail App Password (not your regular password) |
š§° Tech Stack
Component | Technology |
AI Model | Claude (Anthropic) |
MCP Client | Claude Desktop |
MCP Server | Python + |
Package Manager |
|
SMTP (Gmail) | |
Data Validation | Pydantic ( |
š¤ Contributing
Pull requests are welcome! For major changes, please open an issue first to discuss what you'd like to change.
š License
This project is licensed under the MIT License.
Available Tools
12 toolsadd_employeeC
Add a new employee to the HRMS system. :param emp_name: Employee name :param manager_id: Manager ID (optional) :return: Confirmation message
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | |||
| emp_name | Yes | ||
| manager_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It does mention a confirmation message as the return value, but it fails to disclose side effects, permissions, or validation behavior. More critically, it contradicts the input schema by labeling manager_id as optional when the schema requires it, which is misleading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core action. The :param/:return format is somewhat archaic but not verbose. However, structure is hampered by missing email documentation and the optionality error, which reduce overall clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple create operation, the description provides a basic purpose and return value, but it is incomplete: it omits the email parameter, contradicts the schema on manager_id, and offers no context about validity, permissions, or when to use the tool. The output schema exists but is not referenced or explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It offers brief semantics for emp_name and manager_id, but incorrectly marks manager_id as optional and omits the email parameter entirely. This partial and inaccurate coverage does not reliably aid the agent in understanding required inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Add a new employee to the HRMS system,' which is specific and identifies the resource. However, it does not explicitly differentiate from sibling tools like get_employee_details or apply_leave, and the optionality of manager_id introduces ambiguity about actual inputs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool vs. alternatives. The description lacks any context about prerequisites, appropriate scenarios, or when other employee-related tools should be used instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_leaveA
Apply for leave for an employee. :param emp_id: Employee ID :param leave_dates: List of leave dates :return: Leave application status message
| Name | Required | Description | Default |
|---|---|---|---|
| emp_id | Yes | ||
| leave_dates | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the return value (status message) but omits important behavior such as whether the tool checks leave balance, how conflicts are handled, or whether the action is reversible. A write operation like this needs more disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core action, followed by structured param docs. Every sentence earns its place, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and presence of an output schema, the description is mostly adequate. It covers the action and return value, but lacks contextual guidance on prerequisites or edge cases (e.g., overlapping leave, insufficient balance). The presence of sibling tools like leave balance suggests more context would help.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, but the description includes :param lines adding basic meaning ('Employee ID', 'List of leave dates') beyond the schema's type/title. However, it doesn't clarify date format (e.g., ISO strings, range representation), so the compensation is only partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action with a specific verb and resource: 'Apply for leave for an employee.' This distinguishes it from sibling tools like get_employee_leave_balance (viewing balance) and get_leave_history (viewing history), making the purpose immediately identifiable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (when applying for leave) but does not explicitly discuss when not to use it or mention alternatives. For example, it doesn't suggest checking leave balance first with get_employee_leave_balance. Context is clear but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_meetingB
Cancel a scheduled meeting for an employee. :param employee_id: Employee ID :param meeting_datetime: Date and time of the meeting in python datetime format :param topic: Topic of the meeting (optional) :return: Confirmation message
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | ||
| employee_id | Yes | ||
| meeting_datetime | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It only states the action and return message, but does not disclose side effects (e.g., permanent cancellation, possible notifications), permission requirements, or error behavior. This is insufficient for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and structured with param lines and a return line. It is not overly verbose, though the param listing partially duplicates schema information. The extra formatting with colons is acceptable but not ideal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple cancellation tool with an output schema, the description covers the essential action and return value. However, the contradiction about optional parameters and the lack of error handling or validation context leave notable gaps. It is minimally adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds some meaning beyond the schema (e.g., 'python datetime format' for meeting_datetime, topic being optional), but it contradicts the schema by calling 'topic' optional when the schema lists it as required. This inconsistency significantly reduces trust and practical value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Cancel') and resource ('scheduled meeting') and identifies the target ('employee'). It clearly distinguishes from sibling tools like 'schedule_meeting' and 'get_meetings' by indicating a cancellation action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage is implied by the tool name and verb, but there is no explicit guidance on when to prefer this tool over alternatives, nor any exclusions. The description does not state prerequisites like whether the meeting must exist or who is allowed to cancel.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_ticketA
Create a ticket for buying required items for an employee. :param emp_id: Employee ID :param item: Item requested (Laptop, ID Card, etc.) :param reason: Reason for the request :return: Confirmation message
| Name | Required | Description | Default |
|---|---|---|---|
| item | Yes | ||
| emp_id | Yes | ||
| reason | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only states that a ticket is created and a confirmation message is returned. It does not mention side effects, required permissions, error conditions, or whether the action is reversible. This is minimal behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the primary purpose. It contains only two sentences plus a structured parameter list, with no redundancy or irrelevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with 3 required params and an output schema, the description covers purpose, parameters, and return value. However, it lacks usage guidance and behavioral details, making it only minimally complete given the absence of annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no descriptions (0% coverage), but the description includes :param lines that explain each parameter: emp_id as Employee ID, item with examples (Laptop, ID Card), and reason as the request reason. This adds meaningful context beyond the bare schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create a ticket') and the purpose ('for buying required items for an employee'). It distinguishes itself from sibling tools like update_ticket_status and list_tickets by specifying the creation intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for buying required items for an employee' implies when to use the tool, but there is no explicit guidance on alternatives, prerequisites, or when not to use it. The context is present but not elaborated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_employee_detailsA
Get employee details by name. :param name: Name of the employee :return: Employee ID and manager ID
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It explicitly states the output fields, but does not mention error behavior (e.g., employee not found), case sensitivity, or permission requirements. This is adequate for a simple read operation but leaves gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, using three short sentences to convey purpose, parameter, and return values. Every sentence is informative and there is no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple one-parameter lookup and the presence of an output schema, the description is reasonably complete. It covers the input and output essentials, though it omits edge cases like missing employees. Overall, it is sufficient for the tool's low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only restates 'Name of the employee' for the 'name' parameter, adding no detail about format, exact matching, or required semantics beyond the schema's property title. The description adds minimal value over the structured schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves employee details by name and specifies the exact return values (Employee ID and manager ID). This distinguishes it from siblings like get_employee_leave_balance, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. While the sibling list includes get_employee_leave_balance, the description does not mention any exclusions or preferred contexts, leaving the agent to infer usage solely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_employee_leave_balanceC
Get the leave balance of an employee. :param emp_id: Employee ID :return: Leave balance message
| Name | Required | Description | Default |
|---|---|---|---|
| emp_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses a return type ('Leave balance message') but does not explain the message content, confirm it is a read-only operation, or mention any potential side effects or limitations. The term 'message' is vague.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and uses a structured docstring format, but it is under-specified. While not bloated, a few additional words could significantly improve clarity without sacrificing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even for a simple tool, the description omits critical context such as what the leave balance message contains, error scenarios (e.g., invalid employee ID), and how this tool relates to get_leave_history. The output schema exists but is not referenced, and the description adds little supplementary value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description's ':param emp_id: Employee ID' merely repeats the parameter name and schema title. It adds no format, example, or contextual meaning beyond the schema's type and required flag. With schema description coverage at 0%, the description fails to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get the leave balance of an employee' with a specific verb and resource. It distinguishes from sibling tools like get_leave_history and get_employee_details by focusing on 'balance' and the employee relationship.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as get_leave_history or apply_leave. There are no use case descriptions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_leave_historyC
Get the leave history of an employee. :param emp_id: Employee ID :return: Leave history message
| Name | Required | Description | Default |
|---|---|---|---|
| emp_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only says ':return: Leave history message,' which is vague and does not explain the nature of the history (e.g., dates, statuses, formatting), potential errors, or any side effects. This is insufficient for an agent to understand the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose. It wastes no words, but it is under-specified. A more complete description could include relevant details without being verbose, so while it is efficient, it sacrifices usefulness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter) and the lack of annotations, the description should provide more context about what 'leave history' includes, how the result is structured, and any edge cases. The current description is too sparse to be considered complete for an AI agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for the emp_id parameter, so the description must compensate. It states 'emp_id: Employee ID' and 'return: Leave history message,' but these are largely redundant with the parameter name and provide minimal additional meaning. The description does not clarify expected formats, constraints, or the meaning of the return value in any detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb and resource: 'Get the leave history of an employee.' This is distinct and unambiguous. However, it does not explicitly differentiate from sibling tools like get_employee_leave_balance, which could cause minor confusion about which leave-related tool to use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention context, prerequisites, or exclusions. Sibling tools such as get_employee_leave_balance and apply_leave imply related scenarios, but the description offers no decision-making support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_meetingsB
Get the list of meetings scheduled for an employee. :param employee_id: Employee ID :return: List of meetings
| Name | Required | Description | Default |
|---|---|---|---|
| employee_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the return type (list of meetings) and the input parameter, but does not mention edge cases, authorization requirements, or whether 'scheduled' means upcoming meetings only. The transparency is minimal but acceptable for a straightforward read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, with a clear purpose sentence and a standard docstring format. The param line is somewhat redundant with the schema, but the overall structure is clean and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and has an output schema, so return field details are covered. However, the description does not clarify the scope of 'meetings scheduled' (e.g., upcoming vs. all), which could lead to ambiguity. Given sibling tools for scheduling/canceling, this context would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, and the description only repeats 'Employee ID' without adding any format, constraints, or contextual meaning. The parameter meaning is entirely dependent on its name, which is insufficient when the schema provides no extra detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a list of meetings for an employee, using the specific verb 'Get' and a concrete resource. It distinguishes itself from sibling tools like schedule_meeting and cancel_meeting by its getter nature, though it does not explicitly reference them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. The verb 'get' implies a read operation, but there is no mention of exclusions or preferred contexts. For a simple getter, this is adequate but lacks explicit usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ticketsC
List tickets for an employee with optional status filter. :param employee_id: Employee ID :param status: Ticket status (optional) :return: List of tickets
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | ||
| employee_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states that it returns a list of tickets and doesn't mention side effects, permissions, or pagination. Additionally, it says the status filter is optional while the schema requires status, creating ambiguity about runtime behavior when status is omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and uses a clear :param/:return structure, which is concise. However, the parameter lines duplicate schema information and include an inaccurate 'optional' note, making the structure misleading despite its brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter list tool, the description is incomplete. It doesn't explain allowed status values, pagination, output shape (despite an output schema existing), or the discrepancy between the optional label and the required schema field. An agent would struggle to use this tool correctly without additional information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero description coverage, so the inline parameter descriptions are the only semantic information. However, they are minimal and partially contradictory: 'employee_id' is described as 'Employee ID' (tautological) and 'status' is marked optional despite being required in the schema. No valid values or default behavior are provided, which is insufficient for an agent to construct a correct call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists tickets for an employee, using a specific verb and resource. It is distinct from sibling tools like create_ticket and update_ticket_status, though it doesn't explicitly call out alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus other ticket or employee tools. It doesn't mention any prerequisites, exclusions, or conditions that would help an agent choose this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schedule_meetingB
Schedule a meeting for an employee. :param employee_id: Employee ID :param meeting_datetime: Date and time of the meeting in python datetime format :param topic: Topic of the meeting :return: Confirmation message
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | ||
| employee_id | Yes | ||
| meeting_datetime | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only states the return is a 'Confirmation message' and does not mention side effects (e.g., calendar creation, notifications), potential conflicts, permissions, or failure modes. This is minimal behavioral information for a mutation-like operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the main action, followed by a clear parameter list and return type. No filler or redundant statements. The structure is easy to scan, though the parameter lines are minimal and could be tightened further.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with three required params and an output schema, listing all inputs and a return message is nearly sufficient. However, it lacks context about validation, constraints, or how this relates to other meeting tools. The absence of any behavioral or error-handling details leaves some gaps, but not enough to be severely incomplete for a basic scheduling action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description is the primary source of parameter meaning. It provides one-line explanations for each parameter, and the 'python datetime format' note adds useful context beyond the schema. However, this conflicts slightly with the schema's string date-time format, and no concrete examples are given, so it only partially compensates for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description unambiguously states the action ('Schedule a meeting') and the target ('for an employee'), clearly distinguishing it from sibling tools like cancel_meeting and get_meetings. This is a specific verb+resource pairing with no ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives, nor any mention of prerequisites or when not to use it. The context is clear but the description does not differentiate usage from sibling tools like cancel_meeting or create_ticket, leaving the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_emailD
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| html | No | ||
| subject | Yes | ||
| to_emails | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_ticket_statusC
Update the status of a ticket. :param ticket_id: Ticket ID :param status: New status of the ticket :return: Confirmation message
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | ||
| ticket_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only states 'Update' and a return message, but omits whether this is a permanent write, whether it validates status values, or required permissions. The 'Confirmation message' hints at output but not side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loaded with the purpose. However, the parameter lines are redundant with the schema titles, adding little value. Still, it is concise and well-structured with a docstring format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, but the description doesn't specify valid status values, whether the ticket must already exist, or the exact confirmation content. Given no output schema details are visible here, the description should provide more context to avoid incorrect usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema coverage is 0%, so the description must define parameters. It only restates the parameter names: 'ticket_id: Ticket ID' adds no meaning beyond the schema title, and 'status: New status' is vague, lacking allowed values or format. This fails to compensate for the schema's lack of enums.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Update' and resource 'ticket status', clearly stating what the tool does. It doesn't explicitly contrast with siblings like create_ticket or list_tickets, but the action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives like create_ticket or list_tickets. There are no instructions on prerequisites such as the ticket needing to exist, nor any exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct HR function: employee details, email, ticket lifecycle, meeting lifecycle, and leave management. Despite some overlapping resource types (e.g., tickets, meetings), the actions are clearly different and descriptions remove ambiguity.
Tool names mostly follow a snake_case verb_noun pattern, but there are inconsistencies: 'get_meetings' and 'list_tickets' both retrieve lists yet use different verbs, while 'add_employee' and 'create_ticket' both indicate creation. This mixed convention, though readable, is not fully predictable.
12 tools is well-scoped for an HR assistant covering employee, ticket, meeting, and leave management. Each tool earns its place, and the count is within the ideal range for a domain-specific server.
The set covers core actions (create, read, some update/delete) for each subdomain, but notable gaps exist: no employee update/delete, no meeting reschedule, and no leave cancellation. These missing lifecycle operations are significant but not severe enough to render the server unusable.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
AI-powered corporate learning platform ā manage courses, users, and insights via Claude.
Automate tasks, processes, and approvals with AI.
Give AI agents 30,000+ safe, token-optimized actions across Workday, SAP, Oracle + hundreds more.
One workspace of tools for Claude and ChatGPT: connect 600+ apps, generate media, build tools.
Related MCP Servers
- FlicenseBqualityCmaintenanceEnables HR teams to query and manage employee leave through natural language using Claude Desktop, with tools for checking balances, applying leave, and viewing history.3
- FlicenseBqualityCmaintenanceAgentic AI system that automates HR workflows like employee onboarding, enabling HR teams to streamline tasks through natural language interactions with Claude Desktop.12
- FlicenseCqualityCmaintenanceAutomates employee onboarding workflows for HR teams, enabling tasks like data entry and email notifications through natural language.12
- FlicenseNot gradedqualityCmaintenanceEnables HR teams to automate employee onboarding workflows through an Agentic AI system integrated with Claude Desktop.1
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/saibalajijammu/HR_helpdesk'
If you have feedback or need assistance with the MCP directory API, please join our Discord server