Command-line interface for Kolay IK (https://apidocs.kolayik.com)
Project description
Disclaimer (Alpha)
- Unofficial project. This is an independent lab application, not a Kolay IK product. Kolay Yazilim A.S. is not responsible for any data loss or issues caused by this software.
- Your token, your responsibility. Generate tokens at app.kolayik.com/settings/developer-settings and keep them safe.
- Write operations are real. Every create, update, delete, and terminate action modifies live HR data. There is no sandbox.
- Alpha software. Expect bugs. Report them at GitHub Issues.
kolay-cli
███████████████████████
████ ████
████ ████
████ ████ ████ ███
███ ████ ████ ███
████ ███ ████ ███
████ ████ ████ █████ █████████ ███ █████████ ████ ████ ████
████ ████ ████ █████ █████████████ ███ ███████████████ ████ ████
████ ████ ████ ████ ████ ████ ███ ████ █████ ███ ████
████ ██████ ████████ ████ ████ ███ ████ ████ ████ ███
████ ████████ ████████ ████ ████ ███ ████ ████ ████ ████
████ ███ ████ ████ █████ ████ ████ ███ ████ ████ ████████
████ ████ ████ ████ ████ █████ █████ ███ █████ ██████ ██████
████ ████ ███ ████ ████ ███████████ ███ ██████████████ █████
███ ████ ████ █████ ████ ████
███████ ████ ████
███████████████████████ ██████
█████████████████████ ███
CLI and MCP server for Kolay IK. Manage employees, leaves, timelogs, trainings, and payroll from your terminal or through any AI assistant that supports MCP.
Install
# recommended (isolated environment)
pipx install kolay-cli
# or plain pip
pip install kolay-cli
This gives you two commands:
| Command | Purpose |
|---|---|
kolay |
Interactive CLI for terminal use |
kolay-mcp |
MCP server binary (used by AI clients) |
Setup
# guided first-time setup (token + config in one step)
kolay setup
# or authenticate manually
kolay auth login
You need a Kolay IK API token. Generate one at: app.kolayik.com/settings/developer-settings
Verify everything works:
kolay doctor
CLI Usage
Commands follow a kolay <resource> <action> pattern.
People
# list active employees (default: 20 per page)
kolay person list
# list with a limit
kolay person list --limit 50
# search by name
kolay person list --search "Ahmet"
# view a specific employee (interactive picker if no ID given)
kolay person view
kolay person view abc123def456
# create a new employee
kolay person create --first-name "Ayse" --last-name "Yilmaz" \
--email "ayse@company.com" --start-date 2026-04-01
# terminate an employee
kolay person terminate abc123def456 --date 2026-03-31 --reason 03
Leaves
# list approved leaves
kolay leave list
# list pending leaves for a specific person
kolay leave list --status waiting --person-id abc123def456
# create a leave request
kolay leave create --person-id abc123def456 --type-id <leave-type-uuid> \
--start 2026-04-10 --end 2026-04-12
# cancel a leave
kolay leave cancel <leave-id>
Timelogs
# list recent timelogs
kolay timelog list
# create an overtime entry
kolay timelog create --person-id abc123def456 \
--start "2026-03-10 18:00:00" --end "2026-03-10 21:00:00" --type overtime
# delete a timelog
kolay timelog delete <timelog-id>
Trainings
# list training catalogue
kolay training list
# assign a training to an employee
kolay training assign --person-id abc123def456 --training-id <training-uuid>
Transactions (Payroll)
# list all transactions
kolay transaction list
# create a bonus
kolay transaction create --person-id abc123def456 \
--type bonus --amount 5000 --date 2026-03-01
Other Resources
kolay calendar list # company calendar events
kolay unit tree # organisational chart
kolay approval list # approval workflows
kolay expense list # expense records
Output Modes
| Flag | What it does |
|---|---|
--json |
Machine-readable JSON output (for scripts and AI agents) |
--yes |
Skip confirmation prompts on destructive actions |
--debug |
Log HTTP traces to ~/.config/kolay/debug.log |
# pipe JSON output to jq
kolay --json person list --limit 5 | jq '.items[].firstName'
# delete without confirmation prompt
kolay --yes timelog delete <id>
MCP Server (AI Integration)
kolay-cli ships a full Model Context Protocol server. Any MCP-compatible AI client can manage your HR data through natural language.
Option 1: Use the Public Server (no deployment needed)
A shared multi-tenant endpoint is available at:
https://kolay.up.railway.app/mcp
Each user sends their own Kolay IK token via the X-Kolay-Token header. No tokens are stored on the server; they are used only for the duration of each request.
Connect from any MCP client by setting the URL and passing your token:
{
"mcpServers": {
"kolay-ik": {
"url": "https://kolay.up.railway.app/mcp",
"headers": {
"X-Kolay-Token": "YOUR_KOLAY_API_TOKEN"
}
}
}
}
Option 2: Local Mode (stdio)
For AI clients running on your machine (Claude Desktop, Cursor, etc.), the automated installer writes the correct config for you:
kolay mcp install
Restart your AI client after running this. Supported clients:
| Client | Config Location |
|---|---|
| Claude Desktop | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Cursor (global) | ~/.cursor/mcp.json |
| Cursor (project) | .cursor/mcp.json |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
| Gemini CLI | ~/.gemini/settings.json |
| VS Code (Copilot) | User-level mcp.json |
| Zed | ~/.config/zed/settings.json |
Option 3: Self-Host (Railway / Docker)
Deploy your own private instance for full control.
- Push the repo to GitHub
- Create a Railway project -> Deploy from GitHub repo
- Set environment variables in Railway:
| Variable | Description |
|---|---|
KOLAY_API_TOKEN |
Your Kolay IK API token (single-tenant mode) |
PYTHONUNBUFFERED |
1 |
MCP_API_KEY |
Optional gateway key for abuse prevention |
- Enable public networking in Railway settings
- Your endpoint:
https://<your-app>.up.railway.app/mcp
Or run locally in HTTP mode:
export KOLAY_API_TOKEN="your-token"
kolay mcp serve --transport http --port 8000
How Authentication Works
AI Client --> POST /mcp --> MCP Handshake (always succeeds)
|
Tool Call
|
@require_auth checks token
/ \
token found no token
| |
Kolay API 401 error to AI
The MCP session always connects successfully. Authentication happens at the tool level -- every HR tool checks for a valid token before accessing data. This means AI clients can discover available tools before authenticating.
Token resolution order:
X-Kolay-Tokenheader (per-request, multi-tenant)Authorization: Bearer <token>headerKOLAY_API_TOKENenvironment variable (single-tenant fallback)
Available MCP Tools
The server exposes these tools to AI clients:
| Tool | Description |
|---|---|
validate_connection |
Check if credentials are working |
person_list, person_view, person_summary |
Read employee data |
person_create, person_update, person_terminate |
Write employee data |
leave_list, leave_view, leave_create, leave_cancel |
Manage leaves |
request_time_off |
Natural language leave creation |
analyze_leave_impact |
Dry-run balance check before booking leave |
timelog_list, timelog_create, timelog_delete |
Manage timelogs |
training_list, training_create, person_assign_training |
Manage trainings |
transaction_list, transaction_create, transaction_delete |
Manage payroll |
calendar_list, calendar_create, calendar_update |
Manage events |
unit_tree |
View organisational structure |
employee_health_check |
Cross-reference leaves, timelogs, and trainings in one call |
MCP Prompts
Built-in prompts guide the AI through complex multi-step workflows:
| Prompt | What it does |
|---|---|
employee_snapshot |
Full profile + leave balance report for one employee |
burnout_analyzer |
Scan a department for burnout risk based on unused annual leave |
onboarding_plan |
Generate welcome email, IT checklist, and meeting schedule for a new hire |
offboarding_plan |
Calculate leave payout, handover checklist, and exit interview questions |
bulk_update_assistant |
Safe bulk data cleanup with mandatory human confirmation |
manager_dashboard |
Morning briefing for a department manager |
Connect from Mistral Le Chat
- Go to chat.mistral.ai/connections
- Add a custom connector with URL:
https://kolay.up.railway.app/mcp - Auth: select No Authentication (tools handle it via the server's
KOLAY_API_TOKEN) - Start chatting
Test with curl
# discover available tools
curl -X POST https://kolay.up.railway.app/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}'
Project Structure
src/kolay_cli/
cli.py # entry point, global flags
mcp_server.py # FastMCP server with all tools and prompts
security.py # token storage, validation, @require_auth
api/
client.py # HTTP client (requests + retry)
errors.py # APIError + exit codes
commands/ # one module per resource group
person.py, leave.py, timelog.py, training.py,
transaction.py, calendar.py, unit.py, approval.py, ...
services/ # business logic (used by both CLI and MCP)
ui/
formatters.py # Rich tables, spinners
output.py # JSON mode
pickers.py # interactive ID selection
search.py # client-side filtering
Development
# install with test dependencies
pip install -e ".[test,dev]"
# run tests
pytest tests/ -v
# or using uv
uv run --extra test pytest tests/ -v
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kolay_cli-0.11.4a0.tar.gz.
File metadata
- Download URL: kolay_cli-0.11.4a0.tar.gz
- Upload date:
- Size: 124.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
430159c3b79a3ab455a5f8a1a7c0fbaf401f3e917d9e13477271a8823f5b0248
|
|
| MD5 |
f4885387bdcfe0b8444c8c50fef1dfa3
|
|
| BLAKE2b-256 |
7d85e1316bbc7773d7fa4c672fe7dfe43c1f8afa912ed8e45a7ed1662c22b794
|
File details
Details for the file kolay_cli-0.11.4a0-py3-none-any.whl.
File metadata
- Download URL: kolay_cli-0.11.4a0-py3-none-any.whl
- Upload date:
- Size: 104.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
112ff078159f4d3eb66e758b8f21933274261cbb86ccd732ef6713a33b8a088d
|
|
| MD5 |
a70ee84a45141f6e0b497eefa7390836
|
|
| BLAKE2b-256 |
70d5217f5b61211c6c30971caae9ba872250fba89447a6bfb9543911197fe455
|