HRMS MCP Server
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., "@HRMS MCP Serveradd a new employee named John Doe"
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 Management System (MCP Server)
⚠️ Work in progress. This project is still under active development and is not production-ready. The manager functions in
HRMS/are mock implementations that mimic the API calls of Keka HR software, using in-memory sample data instead of real Keka API integration.
An HR assistant exposed as an MCP (Model Context Protocol) server. It lets an MCP-compatible client (e.g. Claude Desktop) manage employees, tickets, leaves, and meetings, and send emails — backed by in-memory data that is seeded with sample employees on startup.
Features
The MCP server (server.py) exposes the following tools and prompt:
Tool | Description |
| Add a new employee to the HRMS. |
| Look up an employee's details by name. |
| Raise a ticket for equipment/items (laptop, ID card, etc.). |
| Update a ticket's status. |
| List tickets for an employee, optionally filtered by status. |
| Send an email via SMTP. |
Prompt | Description |
| Guided workflow to onboard a new hire end-to-end. |
Additional domain logic lives in the HRMS/ package (employee, leave, meeting,
and ticket managers plus Pydantic schemas.py). These managers currently mock
Keka's HR API; sample data is loaded by utils.seed_services on server start.
Related MCP server: OCP AI Custom HR MCP Server
Requirements
Python >= 3.12
uv (recommended) for dependency management
Setup
Clone the repository:
git clone <your-repo-url> cd HR_Management_SystemInstall dependencies:
uv syncConfigure environment variables. Copy the example file and fill in your SMTP credentials:
cp .env.example .envVariable
Description
MS_EMAILSender email address / SMTP login.
MS_EMAIL_PWDSMTP password or app password.
For Gmail, generate an App Password rather than using your account password.
Running
Start the MCP server (uses stdio transport):
uv run server.pyTo use it with an MCP client such as Claude Desktop, add an entry to the client's MCP server configuration pointing at this command, for example:
{
"mcpServers": {
"atliq-hr-assist": {
"command": "uv",
"args": ["run", "server.py"],
"cwd": "/absolute/path/to/HR_Management_System"
}
}
}You can also test the email sender directly:
uv run emails.pyProject structure
.
├── server.py # MCP server entry point (tools & prompts)
├── emails.py # SMTP email sender
├── utils.py # Seeds the managers with sample data
├── main.py # Hello-world placeholder
├── HRMS/ # Core domain package (mocks Keka HR API)
│ ├── employee_manager.py
│ ├── leave_manager.py
│ ├── meeting_manager.py
│ ├── ticket_manager.py
│ └── schemas.py # Pydantic models
├── .env.example # Template for required environment variables
└── pyproject.tomlRoadmap / TODO
Replace the mock
HRMS/managers with real Keka HR API integration.Persist data instead of using in-memory seeded sample data.
Expand MCP tool coverage for leave and meeting management.
Notes
Data is stored in memory and re-seeded on every start; it is not persisted.
Never commit your
.envfile — it contains secrets and is git-ignored.
Available Tools
6 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 |
|---|---|---|---|
| emp_name | Yes | ||
| manager_id | Yes | ||
| 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 should disclose side effects, permissions, and return behavior. It only mentions adding an employee and returning a confirmation message, lacking details on idempotency, data validation, or system impact.
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 but includes parameter docs inline, making it somewhat structured. However, it is not fully front-loaded and includes redundant return info (output schema exists).
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 3 required parameters, an output schema, and sibling tools, the description lacks details on validation, duplicate handling, and system behavior. It is inadequate for a complete understanding.
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 description must explain parameters. It describes emp_name and manager_id but calls manager_id optional while schema lists it as required. The email parameter is not described at all, and the optional claim contradicts the 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 'Add a new employee to the HRMS system', using a specific verb (add) and resource (employee). This distinguishes it well from siblings like create_ticket or get_employee_details.
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, prerequisites, or when not to use it. The description only states what it does, not usage context.
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 |
|---|---|---|---|
| emp_id | Yes | ||
| item | 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, so the description must disclose behavior. It only states 'Create a ticket...' and mentions a return message. It does not describe any side effects, permissions, idempotency, or workflow implications beyond creation.
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, with a clear purpose sentence followed by parameter documentation. No unnecessary words, and the structure is efficient.
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 creation tool with 3 required parameters and an output schema, the description covers purpose and parameter meaning. However, it lacks context on ticket lifecycle, error conditions, or integration with other tools. With no annotations, more detail would improve completeness.
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 description must compensate. It provides explanatory text for each parameter: 'emp_id: Employee ID', 'item: Item requested (laptop, ID Card, etc.)', 'reason: Reason for the request'. This adds meaning beyond the schema's simple titles and types.
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: 'Create a ticket for buying required items for an employee.' The verb 'Create' and resource 'ticket' are specific, and the context of buying items distinguishes it from siblings like 'add_employee' or 'list_tickets'.
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 on when to use this tool versus alternatives like 'update_ticket_status' or 'list_tickets'. The description implies a creation use case but does not provide any exclusions or comparisons.
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?
Without annotations, the description carries full burden. It states the return values (Employee ID and manager ID) but does not disclose side effects, prerequisites (e.g., employee existence), or error behavior. For a simple read operation, this is minimally adequate but lacks depth.
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 (two lines) and to the point. However, it could include brief usage guidance without becoming verbose. It is efficient but slightly underdeveloped.
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 lookup tool with one parameter and an output schema, the description covers the return structure and parameter purpose. Given the low complexity, it provides adequate context for invocation.
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% (no property descriptions). The description adds a docstring for the 'name' parameter, clarifying that it is the employee's name. This adds value beyond the schema's minimal 'Name' title, though it remains brief.
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 specific verb 'get' and resource 'employee details', clearly indicating retrieval. It distinguishes from sibling tools like add_employee or create_ticket which create records, and list_tickets which lists tickets. The scope 'by name' is explicit.
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 on when to use this tool versus alternatives. It does not mention that this is for looking up an existing employee by name, nor does it contrast with add_employee for creating. The agent must infer usage from the tool name alone.
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 : status
: return : List of tickets| Name | Required | Description | Default |
|---|---|---|---|
| employee_id | Yes | ||
| status | 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 disclose behavioral traits. It fails to mention that the tool likely reads data, any side effects, pagination, or limits. The contradiction between 'optional' and 'required' for status is a transparency issue.
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, but the docstring format redundantly restates parameter names and types already in the schema. One sentence effectively conveys the core purpose, but lacks structure.
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 complexity (2 required params) and no output schema details provided, the description is incomplete. It does not explain return values, filtering behavior, or the status parameter's allowed values. The contradiction between 'optional' and required further reduces completeness.
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 must compensate. It repeats parameter names without explanation (e.g., 'employee_id' not defined, 'status' values not listed). The claim that status is optional contradicts the schema, making parameter semantics confusing.
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 states 'List tickets for an employee with optional status filter', clearly indicating the verb and resource. However, the contradiction with the schema (which requires status) slightly muddles the purpose.
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 like get_employee_details or create_ticket. No context on prerequisites or exclusions.
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 |
|---|---|---|---|
| to_emails | Yes | ||
| subject | Yes | ||
| body | Yes | ||
| html | No |
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_statusB
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 |
|---|---|---|---|
| ticket_id | Yes | ||
| status | 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 full burden of disclosure. It only states 'Update the status' without revealing side effects, validation, or behavior on invalid IDs. A mutation tool needs more detail.
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 docstring-style, with no unnecessary words. It efficiently conveys the core action but could benefit from a cleaner non-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?
Given the lack of parameter details, no annotations, and an output schema that is not described, the description is too minimal. It omits valid statuses, behavior on failure, and output structure, making it incomplete for confident agent invocation.
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%. The description repeats parameter names ('Ticket ID', 'New status') but adds no meaningful constraints or allowed values. It provides minimal clarification beyond the 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 states 'Update the status of a ticket' with a specific verb and resource. It distinguishes from sibling tools like create_ticket and list_tickets, as none of them update ticket status.
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 for updating status but provides no explicit guidance on when to use versus alternatives, nor does it mention prerequisites or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
6 tool updates
v0.1.0- First observed
add_employee - First observed
create_ticket - First observed
get_employee_details - First observed
list_tickets - First observed
send_email - First observed
update_ticket_status
TDQS
Most tools have clear, distinct purposes (employee CRUD, ticket management). However, 'send_email' lacks a description, making its role ambiguous and potentially overlapping with ticket notifications.
All tools follow a consistent verb_noun pattern in snake_case (e.g., add_employee, create_ticket, list_tickets). No mixing of conventions.
6 tools is a reasonable count for an HRMS server covering employee and ticket management. Not too few or too many.
Missing employee update/delete and ticket detail retrieval. Employee lookup only by name, not ID. Notable gaps in CRUD coverage for both domains.
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
- mcp-serverOAuthio.klokin
MCP server exposing klokin time-tracking operations (employees, time entries, stores) to AI clients.
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
MCP server for public_holidays_mcp
An MCP server that provides email capabilities, hosted on Alpic platform
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceMCP server for Cursor that automates HR tasks such as employee onboarding, intranet guidance, time-off and leave requests, and meeting room booking.-
- FlicenseNot gradedqualityCmaintenanceAn MCP server for interacting with an HR database, enabling querying employee data and HR operations via natural language.-
- FlicenseCqualityDmaintenanceMCP server for HR automation that enables employee onboarding workflows through Claude Desktop.12-
- FlicenseNot gradedqualityBmaintenanceAn MCP server that automates HR onboarding tasks including employee management, email, ticketing, meeting scheduling, and leave management, enabling AI agents to handle new-hire workflows from a single prompt.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/lalithdabilpuram01/HRMS_MCP_Server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server