tlc-portal-mcp
This MCP server enables interaction with the TwolineCloud portal's authentication, leave, and timetable features.
Authentication
Log in via browser-based flow to automatically save a JWT token
Import existing session by pasting
localStorage['vuex']from the browserCheck current authentication status
Clear locally stored session
Leave (Vacation) Management
Retrieve supported leave types and check remaining balances
List leave request history with filtering by date range, status, and pagination
Prepare and submit leave requests (full day, AM/PM half-day) with options for reason, emergency contact, and delegate
Cancel existing leave requests by ID
Timetable Management
View timetable management info, personal summaries, available input periods, and daily details
List available projects
Calculate daily work capacity factoring in holidays and leave
Prepare and submit single, daily, or bulk timetable entries
Clear timetable entries for a specific day
System & Configuration
Check server version and registered tools; compare version against latest npm release
Customize via environment variables for portal URLs, session storage, timeouts, and holiday settings
Follow prepare→submit workflow patterns with enforced rules (8h daily max, half/full-day leave restrictions, weekend/holiday exclusions)
Click on "Deploy 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., "@tlc-portal-mcp how many vacation days do I have left?"
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.
tlc-portal-mcp
This is a stdio-based MCP server that allows MCP clients like Claude Code and Codex to use the vacation and timetable functions of the TwolineCloud portal.
By running the package with npx, you can use MCP tools for tasks such as browser login, leave inquiry/application, timetable inquiry/entry, and version diagnostics.
Currently Supported Features
Portal login and authentication status check
Inquiry of leave types, remaining leave, and leave application history
Leave application and cancellation
Timetable management information, available entry periods, and daily details
Inquiry of timetable project lists
Calculation of daily available hours reflecting leave
Preparation and submission of single/period timetable entries
Full daily deletion of timetable entries
Checking the current server version and comparing it with the latest npm version
Related MCP server: ATimeLogger MCP Server
Requirements
Node.js
18+A browser environment capable of portal login
Installation and Registration
Claude Code
# 사용자 전역 등록
claude mcp add tlc-portal-mcp --scope user -- npx -y tlc-portal-mcp
# 현재 프로젝트에만 등록
claude mcp add tlc-portal-mcp -- npx -y tlc-portal-mcpCodex CLI
# 사용자 전역 등록
codex mcp add tlc-portal-mcp -- npx -y tlc-portal-mcpSince Codex does not currently have a separate add command for project-specific use, you can add it directly to .codex/config.toml in the project root if needed.
[mcp_servers.tlc-portal-mcp]
command = "npx"
args = ["-y", "tlc-portal-mcp"]Execution Method Notes
mcp add ... -- npx -y tlc-portal-mcpis not a global installation but an execution command registration.The actual package download occurs when the client runs the server for the first time.
It is not re-installed every time; cached versions may be reused depending on the execution environment.
Therefore, the server includes
system.*tools to check the current version against the latest version.
Authentication Methods
Recommended: auth.login
When the user logs in manually via the opened browser, the JWT from localStorage['vuex'] is automatically saved.
Run
auth.loginComplete portal login and MFA in the browser
Token is automatically saved after successful login
Check authentication status with
auth.status
An instruction overlay is displayed in the browser after a successful login.
Alternative: auth.import_vuex
If the automatic login flow is difficult to use, you can manually copy and paste the vuex value from the browser.
Log in to the portal in the browser
Go to
Application > Local Storage > https://portal.twolinecloud.comin DevToolsCopy the
vuexvalueRun
auth.import_vuexand paste the value
Tool List
System
Tool | Description |
| Returns the currently running server name, version, and list of registered tools |
| Compares the latest npm version with the current version |
Authentication
Tool | Description |
| Automatically saves JWT after browser login |
| Authenticates by pasting |
| Checks current authentication status |
| Deletes local session |
Leave
Tool | Description |
| Inquires supported leave types |
| Inquires remaining leave |
| Inquires leave application history |
| Prepares leave application payload |
| Submits prepared leave application |
| Cancels existing leave application |
Timetable
Tool | Description |
| Inquires timetable management/deadline information |
| Inquires current user's timetable status |
| Inquires available entry periods |
| Inquires detailed timetable for a specific date |
| Summarizes a date range with timetable + public holidays/leave capacity |
| Inquires list of projects available for timetable entry |
| Calculates available hours for the date reflecting leave |
| Prepares single-date timetable entry |
| Submits prepared single-date entry |
| Prepares bulk entries based on a period |
| Submits prepared bulk entries |
| Deletes entire timetable for a specific date |
Timetable Rules
The default available entry time is 8 hours per day.
If there is a half-day leave (
AM,PM,admitAm,admitPm), you can record a maximum of 4 hours.If there is a full-day leave (
allDay,admit), you cannot record entries for that date.South Korean public holidays are primarily retrieved from the Nager.Date API, with built-in fallback data used upon failure.
Weekends and company-wide holidays (
PORTAL_COMPANY_HOLIDAYS) are also treated as non-entry days.Personal leave overlays are calculated based on the
requestDtsorting results fromvacation-svc/request/securein accordance with portal overview rules.workDateandtaskTypeare always required.projectIdis required by default.However, if
taskType === NORMAL, you can enter without aprojectId.Write operations follow the
prepare -> submitflow.
Recommended Usage Order
Initial Diagnosis
system.infosystem.check_updateauth.statusauth.loginif necessary
Leave Flow
leave.get_balancesleave.list_requestsleave.prepare_requestleave.submit_prepared_request
Timetable Flow
timetable.get_available_rangetimetable.get_range_overviewtimetable.list_projectstimetable.get_day_capacitytimetable.prepare_day_entryortimetable.prepare_bulk_entriestimetable.submit_prepared_day_entryortimetable.submit_prepared_bulk_entries
Usage Examples
"현재 서버 버전이랑 최신 버전 비교해줘"
-> system.check_update
"내 휴가 잔여 일수 보여줘"
-> leave.get_balances
"이번 달 휴가 신청 이력 보여줘"
-> leave.list_requests
"4월 30일 오전 반차 신청 준비해줘"
-> leave.prepare_request
"오늘 입력 가능한 타임테이블 시간 계산해줘"
-> timetable.get_day_capacity
"2026년 2월 타임테이블 전체를 공휴일 포함해서 요약해줘"
-> timetable.get_range_overview
"2026-04-05에 프로젝트 274로 4시간, taskType EXECUTE로 입력 준비해줘"
-> timetable.prepare_day_entry
"오늘 일반업무 2시간, taskType NORMAL로 입력 준비해줘"
-> timetable.prepare_day_entry
"4월 1일부터 4월 3일까지 같은 내용으로 일괄 입력 준비해줘"
-> timetable.prepare_bulk_entriesEnvironment Variables
Variable | Default Value | Description |
|
| Portal base URL |
|
| Login entry path |
|
| URL reached after successful login |
|
| Local session storage file |
|
| API request timeout in seconds |
| `` | Comma-separated list of company-wide holidays ( |
|
| South Korean public holiday API base URL |
Limitations
The JWT validity period is currently about 2 hours.
If the token expires, you must run
auth.loginorauth.import_vuexagain.Refresh tokens are not used.
The session file is stored only locally and is not uploaded to the server.
system.check_updatecan only check the latest version in environments with access to the npm registry.If the public holiday lookup API fails, it defaults to built-in fallback data.
The
NORMAL+ noprojectIdcombination for the timetable is implemented as an allowed flow based on documentation, but actual acceptance by the portal backend needs to be verified in the production environment.
Available Tools
10 toolsauth.clearA
저장된 인증 세션을 삭제한다.
Inputs: no named parameters.
auth.import_vuexB
브라우저 localStorage['vuex'] 값을 붙여넣어 인증 상태를 가져온다.
Inputs: vuex_payload (required).
auth.loginC
브라우저를 열어 사용자가 직접 로그인하면 JWT를 자동 저장한다.
Inputs: timeout_seconds.
auth.statusB
현재 인증 상태를 반환한다.
Inputs: no named parameters.
leave.cancel_requestB
기존 휴가 신청을 취소한다.
Inputs: request_id (required).
leave.get_balancesB
현재 잔여 휴가를 조회한다.
Inputs: no named parameters.
leave.list_requestsC
휴가 신청 내역을 조회한다.
Inputs: statuses, from_date, to_date, limit, +1 more.
leave.list_typesA
지원하는 휴가 유형 목록을 반환한다.
Inputs: no named parameters.
leave.prepare_requestB
휴가 신청을 준비한다. 제출 전 확인 단계다.
Inputs: leave_type_code (required), start_date (required), end_date (required), unit, +3 more.
leave.submit_prepared_requestB
준비된 휴가 신청을 포탈에 제출한다.
Inputs: prepared_request_id (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 10 tools
Most tools target distinct resources and actions, especially within the leave namespace. The only possible confusion is between auth.login and auth.import_vuex, but their descriptions clearly separate browser-based login from importing an existing Vuex auth state.
Tool names consistently follow a verb_noun pattern with clear namespace prefixes like auth and leave. auth.status is a minor deviation as a noun, but overall the naming is predictable and easy to navigate.
Ten tools is a well-scoped size for a portal MCP server covering authentication and leave management. Each tool has a clear role, and the count feels neither bloated nor thin.
The leave workflow is well covered: types, balances, listing, preparing, submitting, and cancelling requests. Minor gaps include no direct request detail view or update/edit path, but cancel-and-recreate is a reasonable workaround.
Maintenance
Related MCP Connectors
Timetastic MCP server for ChatGPT, Claude and any AI agent: list wallchart absences, list pending leave requests, approve leave request, decline leave request, book time off, cancel booking, get monthly leave summary and get annual allowance summary in your own Timetastic account. Cotlet works in the account through your Cloud Browser, a real Chrome where you sign in to Timetastic yourself; Cotlet does not store your password and you need no Timetastic API key. About the official Timetastic API: Yes, Timetastic has a REST API with a bearer token, and no official MCP server (checked 20 Oct 2026). Only admin users can get a token, and the API has no endpoints for the monthly and annual summary reports. Setup and FAQ: https://cotlet.dev/integrations/timetastic-api-mcp-server
Shared memory MCP server for Claude Code, Codex, Gemini CLI and Cursor. Cited, editable.
CharlieHR MCP server for ChatGPT, Claude and any AI agent: list team members, list time off requests, approve time off request, deny time off request, book time off, record sick day, adjust time off allowance and cancel time off booking in your own CharlieHR account. Cotlet works in the account through your Cloud Browser, a real Chrome where you sign in to CharlieHR yourself; Cotlet does not store your password and you need no CharlieHR API key. About the official CharlieHR API: CharlieHR has an API, but a narrow one, and no official MCP server (checked 20 Oct 2026). A Super Admin creates a Client ID and Client Secret under Company > Integrations > API Access; the API covers team members, leave, offices and teams. Setup and FAQ: https://cotlet.dev/integrations/charliehr-api-mcp-server
Connect ChatGPT and Claude to your Mac, Windows or Linux with secure MCP remote access.
Related MCP Servers
- FlicenseAqualityCmaintenanceMCP server for logging and checking Jira Cloud worklogs from AI agents such as Claude Code, Claude Desktop, Cursor, or any MCP client that supports stdio.71-
- AlicenseAqualityCmaintenanceA standalone MCP server that exposes the ATimeLogger REST API to Claude Desktop/Code over stdio, enabling activity tracking (start/stop/pause/log), reports/history, and activity type management.864 npm1MIT
- FlicenseAqualityBmaintenanceA local MCP server that bridges Claude Desktop/Cowork to the Azure DevOps CLI, enabling full use of az devops, az repos, az boards, az pipelines, and az artifacts commands.12-
- AlicenseNot gradedqualityDmaintenanceA standalone MCP server that lets Claude Code, opencode, and other MCP clients control your real browser via the QoderWork browser connector extension, preserving login state and providing tools for navigation, clicking, typing, screenshots, and more.ISC