Skip to main content
Glama
huebnermarketing

keka-mcp-server

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
PORTNoHTTP port when TRANSPORT=http3000
TRANSPORTNostdio (default) or httpstdio
KEKA_API_KEYYesAPI key from Keka admin
KEKA_SANDBOXNoSet to true to use kekademo.com sandbox auth
KEKA_BASE_URLYesYour Keka tenant URL, e.g. https://yourcompany.keka.com
KEKA_CLIENT_IDYesOAuth2 Client ID from Keka admin
KEKA_EMPLOYEE_IDNoYour own Keka employee ID — used as requestedBy when applying leave on behalf of others
KEKA_CLIENT_SECRETYesOAuth2 Client Secret

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}
prompts
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
keka_list_employeesA

Retrieve a paginated list of employees from Keka HRM.

Supports filtering by employment status, employee IDs, probation status, notice period, and a free-text search key.

Args:

  • employmentStatus (string, optional): Filter by status — 'Active', 'InActive', 'Terminated', 'NotJoined'

  • employeeIds (string, optional): Comma-separated employee IDs to fetch specific employees

  • searchKey (string, optional): Free-text search across name, email, employee number

  • inProbation (boolean, optional): Filter employees currently in probation

  • inNoticePeriod (boolean, optional): Filter employees in notice period

  • pageNumber (integer): Page number, starting at 1 (default: 1)

  • pageSize (integer): Results per page, max 200 (default: 100)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: Paginated list of employees with ID, name, email, department, job title, status, and join date.

Examples:

  • List all active employees → employmentStatus='Active'

  • Find a specific person → searchKey='John Doe'

  • Get employees by IDs → employeeIds='emp1,emp2,emp3'

keka_get_employeeA

Retrieve full details for a single employee by their Keka employee ID.

Args:

  • employeeId (string, required): The Keka employee ID (use keka_list_employees to find IDs)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: Complete employee profile including personal info, department, job title, manager, location, and employment details.

keka_list_departmentsA

Retrieve all departments defined in Keka HRM.

Args:

  • pageNumber (integer): Page number (default: 1)

  • pageSize (integer): Results per page, max 200 (default: 100)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: List of departments with IDs, names, parent department, and department lead.

keka_list_job_titlesA

Retrieve all job titles configured in Keka HRM.

Args:

  • pageNumber (integer): Page number (default: 1)

  • pageSize (integer): Results per page, max 200 (default: 100)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: List of job titles with their IDs and names.

keka_list_groupsA

Retrieve all groups (teams/divisions) configured in Keka HRM.

Args:

  • pageNumber (integer): Page number (default: 1)

  • pageSize (integer): Results per page, max 200 (default: 100)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: List of groups with IDs, names, and types.

keka_list_leave_typesA

Retrieve all leave types configured in Keka (e.g., Annual Leave, Sick Leave, Casual Leave).

Args:

  • pageNumber (integer): Page number (default: 1)

  • pageSize (integer): Results per page, max 200 (default: 100)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: List of leave types with ID, name, code, and whether they are paid leave. Use the returned IDs when creating leave requests with keka_create_leave_request.

keka_list_leave_requestsA

Retrieve leave requests from Keka with optional filters for employees and date range.

Args:

  • employeeIds (string, optional): Comma-separated employee IDs to filter by

  • from (string, optional): Start date in ISO 8601 format (e.g., '2025-01-01')

  • to (string, optional): End date in ISO 8601 format (e.g., '2025-01-31')

  • pageNumber (integer): Page number (default: 1)

  • pageSize (integer): Results per page, max 200 (default: 100)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: List of leave requests with employee, leave type, dates, number of days, status, and reason.

Examples:

  • View pending leaves for a team → pass employeeIds and a date range

  • See who is on leave this month → from='2025-03-01', to='2025-03-31'

keka_create_leave_requestA

Submit a new leave request for an employee in Keka.

Args:

  • employeeId (string, required): Keka employee ID for whom leave is being requested

  • leaveTypeId (string, required): Leave type ID (use keka_list_leave_types to find IDs)

  • fromDate (string, required): Start date in ISO 8601 format (e.g., '2025-04-01')

  • toDate (string, required): End date in ISO 8601 format (e.g., '2025-04-03')

  • fromSession (number, optional): Start session — 0 = first half, 1 = second half (default: 0)

  • toSession (number, optional): End session — 0 = first half, 1 = second half (default: 1)

  • reason (string, optional): Reason for leave

  • note (string, optional): Additional note for the request

  • requestedBy (string, optional): Employee ID of the person submitting on behalf (defaults to employee)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: Confirmation of leave request creation with the generated request ID.

Note: Requires the API key to have leave management write permissions.

keka_get_leave_balancesA

Retrieve leave balances for employees in Keka.

Args:

  • employeeIds (string, optional): Comma-separated employee IDs (omit for all employees)

  • pageNumber (integer): Page number (default: 1)

  • pageSize (integer): Results per page, max 200 (default: 100)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: Leave balance breakdown per employee and leave type — opening, earned, taken, pending, and closing balances.

keka_get_attendanceA

Retrieve attendance records for employees from Keka.

The Keka API supports a maximum date range of 90 days per request and defaults to the last 30 days.

Args:

  • employeeIds (string, optional): Comma-separated employee IDs to filter records

  • from (string, optional): Start date in ISO 8601 format (e.g., '2025-03-01'). Max 90-day range.

  • to (string, optional): End date in ISO 8601 format (e.g., '2025-03-31'). Max 90-day range.

  • pageNumber (integer): Page number (default: 1)

  • pageSize (integer): Results per page, max 200 (default: 100)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: Attendance records per employee per day — clock-in, clock-out, total hours, shift, and status (Present, Absent, Half-Day, etc.).

Examples:

  • View attendance for a team this month → from='2025-03-01', to='2025-03-31', employeeIds='id1,id2'

  • Check if an employee was present → employeeIds='emp123', from='2025-03-10', to='2025-03-10'

keka_list_pay_groupsA

Retrieve all payroll groups configured in Keka.

Pay groups define payroll cycles and are used to filter salary listings.

Args:

  • pageNumber (integer): Page number (default: 1)

  • pageSize (integer): Results per page, max 200 (default: 100)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: List of pay groups with IDs, names, and descriptions. Use IDs with keka_list_salaries to filter by pay group.

keka_list_pay_bandsA

Retrieve all salary pay bands configured in Keka.

Pay bands define compensation ranges for job levels or grades.

Args:

  • pageNumber (integer): Page number (default: 1)

  • pageSize (integer): Results per page, max 200 (default: 100)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: Pay bands with ID, name, minimum and maximum salary amounts, and currency.

keka_list_salariesA

Retrieve salary information for employees from Keka payroll.

⚠️ This tool returns sensitive compensation data. Ensure your API key has payroll read access.

Args:

  • employeeIds (string, optional): Comma-separated employee IDs to filter

  • payGroupIds (string, optional): Comma-separated pay group IDs to filter (use keka_list_pay_groups)

  • employmentStatus (string, optional): Filter by 'Active', 'InActive', 'Terminated', 'NotJoined'

  • pageNumber (integer): Page number (default: 1)

  • pageSize (integer): Results per page, max 200 (default: 100)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: Employee salaries with CTC (Cost to Company), pay group, currency, and effective date.

keka_list_jobsA

Retrieve all job openings from Keka Hire (Recruitment module).

Args:

  • pageNumber (integer): Page number (default: 1)

  • pageSize (integer): Results per page, max 200 (default: 100)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: Job openings with ID, title, department, location, status, number of openings, posted date, closing date, and hiring manager.

Use keka_list_candidates to see candidates for a specific job.

keka_list_candidatesA

Retrieve candidates for a specific job opening in Keka Hire.

Args:

  • jobId (string, required): The Keka job ID (use keka_list_jobs to find IDs)

  • pageNumber (integer): Page number (default: 1)

  • pageSize (integer): Results per page, max 200 (default: 100)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: Candidate list with name, email, phone, current interview stage, application date, source, and status.

keka_list_psa_clientsA

Retrieve all clients from Keka's Professional Services Automation (PSA) module.

Args:

  • pageNumber (integer): Page number (default: 1)

  • pageSize (integer): Results per page, max 200 (default: 100)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: PSA client records with ID, name, email, phone, status, and creation date. Use returned IDs with keka_list_psa_projects to find projects for a client.

keka_list_psa_projectsA

Retrieve projects from Keka's Professional Services Automation (PSA) module.

Args:

  • pageNumber (integer): Page number (default: 1)

  • pageSize (integer): Results per page, max 200 (default: 100)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: PSA projects with ID, name, client, status, start/end dates, budget, currency, and project manager.

Prompts

Interactive templates invoked by user choice

NameDescription
apply_leaveWalks through the full leave application workflow: resolve employee, pick leave type, check balance, and submit.
check_leave_balanceCheck leave balance for one or more employees.
who_is_on_leaveCheck who is on leave for a given date range.
check_attendanceCheck attendance records for employees.
find_employeeLook up employee info by name, email, or employee number.

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4/5.0

Scored across 17 tools

Disambiguation5/5

Each tool targets a distinct entity and action—employees, leave types, requests, balances, attendance, salaries, jobs, candidates, PSA clients/projects—so no two tools overlap in purpose. Descriptions also cross-reference related tools, reinforcing correct selection.

Naming Consistency5/5

All tools use the keka_ prefix with a consistent list/get/create verb followed by a clear noun, making behavior predictable. The naming pattern is uniform throughout the server.

Tool Count4/5

At 17 tools, the count slightly exceeds the typical 3–15 range, but it is justified by the breadth of Keka modules covered (HR, payroll, leave, attendance, recruitment, PSA). There are no redundant tools, and each entity serves a clear purpose.

Completeness3/5

The set provides strong read coverage across multiple modules and supports creating leave requests, but it lacks update/delete/approval actions for most entities—such as employee updates, leave approvals, or candidate workflow steps. This leaves notable lifecycle gaps for a full HRIS integration.

Maintenance

ActivityInactive
ResponsivenessNo issues