Request leave
“I'd like annual leave from next Monday to Wednesday.”
list_leave_typescalculate_leave_daysrequest_leave_otpcreate_leave_request
Connect Claude, Cursor, Windsurf or any other MCP client to your Teamso account: request leave, approve requests, manage your goals, open your payslips, search the guides and work with every other module your permissions allow.
The Model Context Protocol (MCP) is an open standard that lets AI assistants call tools in other systems. Teamso's hosted MCP server at https://mcp.teamso.com/v1 serves clients that support Streamable HTTP and custom headers.
Claude Desktop needs OAuth for remote connections, so it uses the local npm package (@teamso/teamso-mcp). Every request runs with your personal access token and your permissions; the server stores nothing.
Pick your client. They all use the same token: in Teamso, open MCP access at the very bottom of the left menu, create a token and put it in place of tms_pat_... in the examples.
Cmd+Shift+P → Open MCP settings.~/.cursor/mcp.json:{
"mcpServers": {
"teamso": {
"url": "https://mcp.teamso.com/v1",
"headers": {
"Authorization": "Bearer tms_pat_..."
}
}
}
}Restart Cursor; the Teamso tools appear in the MCP list.
One terminal command:
claude mcp add --transport http teamso https://mcp.teamso.com/v1 --header "Authorization: Bearer tms_pat_..."To check, run claude mcp get teamso or type /mcp inside Claude Code.
claude mcp get teamsoRemote custom connectors in Claude Desktop need OAuth; Teamso uses tokens, so use the local package. Add it to claude_desktop_config.json and fully quit and reopen Claude Desktop:
{
"mcpServers": {
"teamso": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@teamso/[email protected]"
],
"env": {
"TEAMSO_ACCESS_TOKEN": "tms_pat_..."
}
}
}
}Pin the version (@1.2.1): an unpinned npx keeps running an old cached build. Do not add the URL under Connectors.
The local package talks to the Teamso API directly and offers all HR tools; the distributor account's content tools are only on the hosted server.
type, command, args and env.timeout field; the client may ignore it.Windsurf → Settings → MCP (~/.codeium/windsurf/mcp_config.json). Windsurf expects the address in serverUrl:
{
"mcpServers": {
"teamso": {
"serverUrl": "https://mcp.teamso.com/v1",
"headers": {
"Authorization": "Bearer tms_pat_..."
}
}
}
}Any client with Streamable HTTP connects to https://mcp.teamso.com/v1 with the Authorization: Bearer tms_pat_... header. Clients that only speak stdio reach the hosted server through mcp-remote:
{
"mcpServers": {
"teamso": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://mcp.teamso.com/v1",
"--header",
"Authorization:Bearer ${TEAMSO_TOKEN}"
],
"env": {
"TEAMSO_TOKEN": "tms_pat_..."
}
}
}
}Clients that can only connect with OAuth are not supported.
Teamso MCP uses a personal access token (tms_pat_...). Create it in Teamso on the MCP access page at the very bottom of the left menu; it is shown only once, when it is created.
Authorization: Bearer tms_pat_...Authorization: Bearer tms_pat_... header; the hosted server stores nothing and forwards the request to the Teamso API.The hosted server and the npm package offer the same 34 tools. Every tool has typed input and output schemas and returns structuredContent plus a short text answer. Which tools you can use depends on your role and permissions.
Searches the Teamso how-to guides. Reads the public guide bundle instead of calling the API.
| Tool | What it does |
|---|---|
search_help_articles | Searches the Teamso guides by keyword; filters by module and role. |
get_help_article | Returns a full guide with its steps. |
list_help_modules | Lists the modules that have guides, with each module's article titles and ids. |
Returns the token owner and their permissions.
| Tool | What it does |
|---|---|
get_me | Your name, email, company, roles, permission codes, manager, department and position. |
Creating and cancelling a leave request is confirmed with an SMS code sent to your phone: the code is valid for 3 minutes and uses digital credit.
| Tool | What it does |
|---|---|
list_leave_types | Leave types you can request and the remaining balance of each. |
get_my_leave_balance | A summary of your leave balance: remaining days per type. |
calculate_leave_days | Calculates how many working days a date range takes and the return-to-work date, using your working calendar and public holidays. |
request_leave_otp | Sends a confirmation code to your phone (valid for 3 minutes, uses SMS credit). |
create_leave_request | Verifies the SMS code, recalculates the days and submits the request to the approval chain. |
list_my_leaves | Your own leave requests, filterable by date and status. |
cancel_leave_request | Deletes a leave request after SMS confirmation; requires the leave delete permission. |
Leave requests where it is your turn to decide.
| Tool | What it does |
|---|---|
list_pending_approvals | Leave requests waiting for your approval. |
approve_or_reject_leave | Approves or rejects a request after checking that it is your turn to decide. A rejection needs a reason. |
Only employees you are allowed to see.
| Tool | What it does |
|---|---|
search_employees | Finds active colleagues by name or email (accent-insensitive). Without access to the company directory it searches the employees you are responsible for. |
get_employee_profile | A colleague's work profile: branch, department, position, manager, work location and contact details (the phone number is masked unless you may read it). |
Goals are linked to a period by its name (the title from list_performance_periods); list the periods before the goal tools.
| Tool | What it does |
|---|---|
list_performance_periods | Performance periods, goal entry windows and the evaluation scale. |
list_my_goals | Your goals in the period and the actions available on each. |
list_team_goals | Goals of the employees you manage or assigned goals to (drafts excluded), with the approvals you can give on each. |
create_user_goal | Adds a draft goal for yourself or a direct report (performance admins: for anyone). |
send_goals_to_approval | Sends your draft (PENDING) goals to your manager for approval. |
approve_goal | Approves a goal that is waiting for approval. |
revise_and_approve_goal | Revises a goal (name, description, weight, target) and approves it. |
update_goal_actual_value | Enters your actual value on a goal under evaluation. |
update_manager_actual_value | Enters the achieved value of an employee's goal as their direct manager or an admin. |
approve_goal_evaluation | Approves an employee's evaluation for the period at your approval step; at the last step Teamso computes the final score. |
Announcements visible to you.
| Tool | What it does |
|---|---|
list_announcements | Company and shuttle announcements visible to you, newest first. |
Only your own payslips.
| Tool | What it does |
|---|---|
list_my_payslips | Your e-payslips and their status, filterable by month or year. |
get_payslip_pdf | Returns a payslip PDF as an embedded resource. |
The rest of Teamso (expenses, requests, overtime, time tracking, payroll, recruiting, inventory, settings...) through the generic API tools. Only the endpoints your own permissions allow are listed and callable; the read tool cannot change data and the write tool shows a preview first.
| Tool | What it does |
|---|---|
find_api_endpoints | Searches the Teamso API endpoints your permissions allow by keyword (Turkish or English), module, HTTP method or effect (read, write, delete). Each result has the endpoint id, a summary, its effect and whether it needs an SMS code or returns a file. |
list_api_modules | Lists the modules you can use and how many endpoints each one offers you. |
describe_api_endpoint | Shows an endpoint's parameters, body schema, response type, whether it needs an SMS code, and a ready-made example call. |
call_api_read | Runs read endpoints only and returns the data. The request is marked read-only, so Teamso refuses anything that would change data. Large lists are shortened; files (PDF, Excel, CSV, images) come back embedded, up to 8 MB. |
call_api_write | Creates, changes or deletes records. Without confirm it sends nothing and returns a preview of the request with a schema check; it runs with confirm=true only after you agree. Takes otp_code for actions that need an SMS code and uploads files as base64 (10 MB in total). |
request_sms_code | After you confirm an action that needs an SMS code, sends a 6-digit verification code to your phone (valid for 3 minutes, uses SMS credit). |
On the hosted server the distributor account also sees the Landing CMS content tools (landing pages, user stories, e-books, webinars, references); these tools are available to the distributor account only. The hosted server also offers the guides as MCP resources (teamso://how-to/...).
Next to the tools, the server publishes MCP prompts (prompts/list, prompts/get); your client shows them as slash commands or in a prompt picker. A prompt only steers the assistant through the tools: every write still needs your confirmation, and a leave request still needs the SMS code.
| Prompt | Arguments | What it does |
|---|---|---|
request_leave | start (optional)First day of leave: yyyy-MM-dd or words like “tomorrow” (Turkey time).end (optional)Last day of leave (yyyy-MM-dd); empty means the same day as start.leave_type (optional)Leave type name, e.g. “Annual leave”; empty means annual leave.note (optional)Note for the approver. | Creates a leave request for the signed-in user: picks the leave type, shows the working days and the remaining balance, asks you to confirm, then sends the request with the SMS code. Missing dates are asked for. |
review_pending_approvals | Takes no arguments. | Lists the leave requests waiting for your approval as a table and asks you, request by request, whether to approve or reject; it never decides for you. A rejection needs a reason. Tool chain: list_pending_approvalsapprove_or_reject_leave |
On the hosted server the distributor account also sees the Landing CMS content prompts (seo_landing_page, translate_marketing_content); the hosted server gets them from the Teamso API.
The ready-made tools on this page cover the most common tasks. For everything else (expenses, requests, overtime, attendance, time tracking, shifts, recruiting, onboarding, inventory, document approval, surveys, reports, company settings...) the assistant uses the generic API tools. They read the Teamso API's endpoint catalog for you: only the endpoints your own permissions allow are listed and callable. If you cannot add leave, for example, the assistant cannot add leave through MCP either.
find_api_endpoints or list_api_modules finds the right endpoint.describe_api_endpoint returns its parameters, body schema and whether it needs an SMS code.call_api_read, which returns the data directly.call_api_write: it shows a preview first and runs with confirm: true only after you agree.A search returns endpoint ids (METHOD /path) and the effect of each endpoint:
{
"name": "find_api_endpoints",
"arguments": {
"query": "masraf",
"side_effect": "read"
}
}{
"structuredContent": {
"query": "masraf",
"sideEffect": "read",
"page": 1,
"size": 20,
"total": 2,
"totalPages": 1,
"endpoints": [
{
"id": "GET /expense-form/{id}",
"module": "EXPENSE",
"summary": "Masraf formu ayrıntısı",
"sideEffect": "read",
"smsCodeRequired": "never",
"fileResponse": false
},
{
"id": "GET /expense-form/listPagination",
"module": "EXPENSE",
"summary": "Masraf formları (sayfalı)",
"sideEffect": "read",
"smsCodeRequired": "never",
"fileResponse": false
}
]
}
}A read uses the id and the path values. The request carries the X-Teamso-Mcp-Intent: read header, and Teamso refuses (403) any request with that header that would change data.
{
"name": "call_api_read",
"arguments": {
"id": "GET /expense-form/{id}",
"path_params": {
"id": "8f1c…"
}
}
}The write tool returns a preview first: the exact request, the result of the schema check, delete and SMS warnings, and a one-line summary. Nothing reaches Teamso at this stage, and a request that does not match the schema is not sent even with confirm: true.
{
"name": "call_api_write",
"arguments": {
"id": "POST /demand",
"body": {
"demandTypeId": "3b7e…",
"message": "Yeni monitör talebi"
}
}
}{
"structuredContent": {
"mode": "preview",
"endpoint": {
"id": "POST /demand",
"module": "DEMAND",
"sideEffect": "write",
"smsCodeRequired": "never"
},
"request": {
"method": "POST",
"path": "/demand"
},
"summary": "Changes data: POST /demand — Create a request",
"validation": {
"checked": true,
"valid": true,
"errors": []
},
"nextAction": {
"tool": "call_api_write",
"arguments": {
"id": "POST /demand",
"body": {
"demandTypeId": "3b7e…",
"message": "Yeni monitör talebi"
},
"confirm": true
},
"reason": "Only after the user explicitly confirms this preview."
}
},
"content": [
{
"type": "text",
"text": "## Preview — nothing has been sent\n\n**Changes data: POST /demand — Create a request**\n…"
}
]
}Once you agree, the assistant repeats the call with confirm: true. For actions that need an SMS code it first calls request_sms_code, asks you for the code and adds it as otp_code:
{
"name": "call_api_write",
"arguments": {
"id": "POST /expense-form/{expenseFormId}/finalize",
"path_params": {
"expenseFormId": "8f1c…"
},
"confirm": true,
"otp_code": "123456"
}
}Illustrative response; fields vary by tool.
truncated: true; nothing is cut silently.To give your assistant fewer tools, add ?toolsets= to the server address (or send the X-Teamso-Toolsets header). The local package takes the same selection from the TEAMSO_TOOLSETS environment variable. The default is every tool; an unknown group name is an error.
claude mcp add --transport http teamso https://mcp.teamso.com/v1?toolsets=core,leave,api --header "Authorization: Bearer tms_pat_..."Groups: core, help, leave, approvals, employees, performance, communication, payroll, api
Tools are called with MCP tools/call. Input is validated against JSON Schema 2020-12; a successful result has structuredContent (typed data for chaining) and content (a short summary for clients that only show text).
{
"name": "calculate_leave_days",
"arguments": {
"leave_type_id": "6f1c…",
"start": "2026-11-02",
"end": "2026-11-04"
}
}When another tool has to follow, the result carries nextAction: the tool to call, its arguments and why. The leave flow is an example: calculate_leave_days → request_leave_otp → create_leave_request.
{
"structuredContent": {
"request": {
"leaveTypeId": "6f1c…",
"leaveTypeName": "Yıllık İzin",
"start": "2026-11-02 09:00",
"end": "2026-11-04 18:00",
"workingDays": 3,
"returnToWorkDate": "2026-11-05 09:00"
},
"remainingDays": 14,
"remainingAfterRequest": 11,
"canRequest": true,
"problems": [],
"nextAction": {
"tool": "request_leave_otp",
"arguments": {},
"reason": "Creating the request needs an SMS code. After the user confirms these days, send the code, then call create_leave_request with the same leave_type_id, start, end and the otp_code."
}
},
"content": [
{
"type": "text",
"text": "## Yıllık İzin: 3 days\n\n- **Dates:** …\n- **Back at work:** 2026-11-05 09:00\n…"
}
]
}Illustrative response; fields vary by tool.
Errors come back with isError: true and a text that says what to do, ending with the Teamso API HTTP status and message_code (e.g. CREDIT_INSUFFICIENT, ITEM_NOT_FOUND).
{
"isError": true,
"content": [
{
"type": "text",
"text": "Your company does not have enough digital (SMS) credit for this step. Ask your Teamso administrator to top up credits.\n\n_Teamso API: HTTP 200 · `CREDIT_INSUFFICIENT`_"
}
]
}Dates: leave uses yyyy-MM-dd HH:mm Turkey time (a bare date starts at your shift start and ends at your shift end; 09:00 and 18:00 by default), goals and filters use yyyy-MM-dd, payroll terms yyyy-MM or yyyy.
get_payslip_pdf returns the payslip as an embedded application/pdf resource (base64).
Ask your assistant in plain language; it calls the tools in order.
“I'd like annual leave from next Monday to Wednesday.”
list_leave_typescalculate_leave_daysrequest_leave_otpcreate_leave_request
“Show the leave requests waiting for me and approve Ayşe's.”
list_pending_approvalsapprove_or_reject_leave
“Add a sales goal weighted 40 percent to the 2026 Q4 period and send it for approval.”
list_performance_periodscreate_user_goalsend_goals_to_approval
“Open my September payslip.”
list_my_payslipsget_payslip_pdf
“How do I enter an overtime request?”
search_help_articlesget_help_article
“Summarize my expenses this month and my open requests.”
find_api_endpointsdescribe_api_endpointcall_api_read
“Create a request for a new monitor.”
find_api_endpointsdescribe_api_endpointcall_api_write
https://mcp.teamso.com/v1.The parameters of every tool. Optional ones can be left out.
search_help_articlesSearches the Teamso guides by keyword; filters by module and role.
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | Yes | Text to search for. |
lang | "tr" | "en" | No | Guide language; default tr. |
module | string | No | Module id from list_help_modules, e.g. leave. |
role | "ADMIN" | "MANAGER" | "EMPLOYEE" | No | Only articles written for this role: ADMIN, MANAGER or EMPLOYEE. |
limit | integer | No | Maximum number of results (1-20, default 5). |
get_help_articleReturns a full guide with its steps.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Article id, e.g. performance.evaluation. |
lang | "tr" | "en" | No | Guide language; default tr. |
list_help_modulesLists the modules that have guides, with each module's article titles and ids.
| Parameter | Type | Required | Description |
|---|---|---|---|
lang | "tr" | "en" | No | Guide language; default tr. |
get_meYour name, email, company, roles, permission codes, manager, department and position.
Takes no parameters.
list_leave_typesLeave types you can request and the remaining balance of each.
Takes no parameters.
get_my_leave_balanceA summary of your leave balance: remaining days per type.
Takes no parameters.
calculate_leave_daysCalculates how many working days a date range takes and the return-to-work date, using your working calendar and public holidays.
| Parameter | Type | Required | Description |
|---|---|---|---|
leave_type_id | string | Yes | Leave type id from list_leave_types. |
start | string | Yes | Start, Turkey time: yyyy-MM-dd (shift start, 09:00 by default) or yyyy-MM-dd HH:mm. |
end | string | Yes | End, Turkey time: yyyy-MM-dd (shift end, 18:00 by default) or yyyy-MM-dd HH:mm. |
request_leave_otpSends a confirmation code to your phone (valid for 3 minutes, uses SMS credit).
Takes no parameters.
create_leave_requestVerifies the SMS code, recalculates the days and submits the request to the approval chain.
| Parameter | Type | Required | Description |
|---|---|---|---|
leave_type_id | string | Yes | Leave type id from list_leave_types. |
start | string | Yes | Start, Turkey time: yyyy-MM-dd (shift start, 09:00 by default) or yyyy-MM-dd HH:mm. |
end | string | Yes | End, Turkey time: yyyy-MM-dd (shift end, 18:00 by default) or yyyy-MM-dd HH:mm. |
description | string | No | Description; required by some leave types. |
otp_code | string | Yes | The 6-digit SMS code from request_leave_otp. |
list_my_leavesYour own leave requests, filterable by date and status.
| Parameter | Type | Required | Description |
|---|---|---|---|
from | string | No | From this date (yyyy-MM-dd). |
to | string | No | Up to this date (yyyy-MM-dd). |
status | "pending_approval" | "approved" | "rejected" | "awaiting_usage_approval" | "completed" | "awaiting_document" | No | Filters by leave status: in approval, approved, rejected, awaiting usage approval, completed, awaiting a document. |
limit | integer | No | Maximum number of records (1-100, default 20). |
cancel_leave_requestDeletes a leave request after SMS confirmation; requires the leave delete permission.
| Parameter | Type | Required | Description |
|---|---|---|---|
leave_id | string | Yes | Leave id from list_my_leaves. |
otp_code | string | Yes | The 6-digit SMS code from request_leave_otp. |
list_pending_approvalsLeave requests waiting for your approval.
Takes no parameters.
approve_or_reject_leaveApproves or rejects a request after checking that it is your turn to decide. A rejection needs a reason.
| Parameter | Type | Required | Description |
|---|---|---|---|
leave_id | string | Yes | Leave id from list_pending_approvals. |
approve | boolean | Yes | true approves, false rejects. |
reason | string | No | Rejection reason; required when rejecting. |
search_employeesFinds active colleagues by name or email (accent-insensitive). Without access to the company directory it searches the employees you are responsible for.
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | Yes | Name, surname or email (Turkish characters optional). |
limit | integer | No | Maximum number of results (1-50, default 10). |
get_employee_profileA colleague's work profile: branch, department, position, manager, work location and contact details (the phone number is masked unless you may read it).
| Parameter | Type | Required | Description |
|---|---|---|---|
user_id | string | Yes | Employee id from search_employees. |
list_performance_periodsPerformance periods, goal entry windows and the evaluation scale.
Takes no parameters.
list_my_goalsYour goals in the period and the actions available on each.
| Parameter | Type | Required | Description |
|---|---|---|---|
period | string | Yes | Period name; exactly the title from list_performance_periods. |
list_team_goalsGoals of the employees you manage or assigned goals to (drafts excluded), with the approvals you can give on each.
| Parameter | Type | Required | Description |
|---|---|---|---|
period | string | Yes | Period name; exactly the title from list_performance_periods. |
status | "PENDING" | "WAITING_APPROVAL" | "APPROVED" | "REVISED_AND_APPROVED" | "IN_PROGRESS" | "EVALUATING" | "EVALUATED" | "EVALUATION_WAITING_APPROVAL" | "EVALUATION_IN_APPROVAL" | "COMPLETED" | "NOT_INCLUDED" | No | Filters by goal status, e.g. WAITING_APPROVAL, EVALUATING. |
create_user_goalAdds a draft goal for yourself or a direct report (performance admins: for anyone).
| Parameter | Type | Required | Description |
|---|---|---|---|
period | string | Yes | Period name; exactly the title from list_performance_periods. |
name | string | Yes | Goal name. |
weight | number | No | Weight (percent); required unless the criterion is OTHER. |
scale_criterion | "POINTS" | "QUANTITY" | "DAYS" | "CURRENCY" | "PERCENTAGE" | "OTHER" | Yes | Criterion: points, quantity, days, currency, percentage or other (OTHER: a free-text goal). |
target_value | number | No | Numeric target; required unless the criterion is OTHER. |
currency | string | No | Currency for CURRENCY, e.g. TRY. |
other_text | string | No | Goal text for OTHER. |
description | string | No | Description. |
user_id | string | No | Goal owner; empty means yourself. Anyone else must report to you directly (performance admins may set goals for anyone); id from search_employees. |
send_goals_to_approvalSends your draft (PENDING) goals to your manager for approval.
| Parameter | Type | Required | Description |
|---|---|---|---|
goal_ids | string[] | Yes | Ids of your draft (PENDING) goals to send, from list_my_goals. |
approve_goalApproves a goal that is waiting for approval.
| Parameter | Type | Required | Description |
|---|---|---|---|
goal_id | string | Yes | Goal id from list_team_goals. |
revise_and_approve_goalRevises a goal (name, description, weight, target) and approves it.
| Parameter | Type | Required | Description |
|---|---|---|---|
goal_id | string | Yes | Goal id from list_team_goals. |
name | string | No | New name. |
description | string | No | New description. |
weight | number | No | New weight. |
target_value | number | No | New target value. |
update_goal_actual_valueEnters your actual value on a goal under evaluation.
| Parameter | Type | Required | Description |
|---|---|---|---|
goal_id | string | Yes | Goal id from list_my_goals. |
actual_value | number | No | Actual numeric value. |
actual_text | string | No | Actual text for OTHER. |
update_manager_actual_valueEnters the achieved value of an employee's goal as their direct manager or an admin.
| Parameter | Type | Required | Description |
|---|---|---|---|
goal_id | string | Yes | Goal id from list_team_goals. |
value | number | No | Actual value entered by the manager. |
text | string | No | Text for OTHER. |
approve_goal_evaluationApproves an employee's evaluation for the period at your approval step; at the last step Teamso computes the final score.
| Parameter | Type | Required | Description |
|---|---|---|---|
period | string | Yes | Period name; exactly the title from list_performance_periods. |
user_id | string | Yes | Id of the employee being evaluated (the goal owner's userId in list_team_goals). |
list_announcementsCompany and shuttle announcements visible to you, newest first.
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | integer | No | Maximum number of announcements (1-50, default 10). |
list_my_payslipsYour e-payslips and their status, filterable by month or year.
| Parameter | Type | Required | Description |
|---|---|---|---|
term | string | No | Term: a month (yyyy-MM) or a whole year (yyyy). |
limit | integer | No | Maximum number of records (1-50, default 12). |
get_payslip_pdfReturns a payslip PDF as an embedded resource.
| Parameter | Type | Required | Description |
|---|---|---|---|
payslip_id | string | Yes | Payslip id from list_my_payslips. |
find_api_endpointsSearches the Teamso API endpoints your permissions allow by keyword (Turkish or English), module, HTTP method or effect (read, write, delete). Each result has the endpoint id, a summary, its effect and whether it needs an SMS code or returns a file.
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | No | 1-3 keywords, e.g. masraf or expense form; every word must match. |
module | string | No | Module code from list_api_modules, e.g. LEAVE, EXPENSE, PAY_SLIP. |
method | "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | No | Only this HTTP method. |
side_effect | "read" | "write" | "delete" | "read_with_writes" | No | Only endpoints with this effect; read for safe lookups. |
page | integer | No | Page number, starting at 1. |
size | integer | No | Results per page (1-50, default 20). |
lang | "tr" | "en" | No | Language of module titles and summaries; default tr. |
list_api_modulesLists the modules you can use and how many endpoints each one offers you.
| Parameter | Type | Required | Description |
|---|---|---|---|
lang | "tr" | "en" | No | Language of module titles and summaries; default tr. |
describe_api_endpointShows an endpoint's parameters, body schema, response type, whether it needs an SMS code, and a ready-made example call.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Endpoint id as find_api_endpoints returns it (METHOD /path), placeholders included. |
lang | "tr" | "en" | No | Language of module titles and summaries; default tr. |
call_api_readRuns read endpoints only and returns the data. The request is marked read-only, so Teamso refuses anything that would change data. Large lists are shortened; files (PDF, Excel, CSV, images) come back embedded, up to 8 MB.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | No | Id of the endpoint to read (METHOD /path); or give method and path. |
method | "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | No | With path, instead of id. |
path | string | No | Catalog path pattern (with placeholders), with method, instead of id. |
path_params | object | No | Values for the placeholders in the path, e.g. id. |
query | object | No | Query parameters; an array repeats the parameter. |
body | object | No | Only for reads sent as POST: the filter body. |
lang | "tr" | "en" | No | Language of module titles and summaries; default tr. |
call_api_writeCreates, changes or deletes records. Without confirm it sends nothing and returns a preview of the request with a schema check; it runs with confirm=true only after you agree. Takes otp_code for actions that need an SMS code and uploads files as base64 (10 MB in total).
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Id of the endpoint to run (METHOD /path). |
path_params | object | No | Values for the placeholders in the path. |
query | object | No | Query parameters. |
body | object | No | JSON matching the endpoint's body schema; for multipart endpoints, the form fields other than files. |
files | { field, filename, content_type, base64 }[] | No | Files for multipart endpoints: field name, file name, MIME type and base64 content (at most 10 files, 10 MB in total). |
confirm | boolean | No | false (default): preview only, nothing is sent. true: runs it, only after the user explicitly confirmed the preview. |
otp_code | string | No | For endpoints that need an SMS code: the code from request_sms_code (valid for 3 minutes). |
lang | "tr" | "en" | No | Language of module titles and summaries; default tr. |
request_sms_codeAfter you confirm an action that needs an SMS code, sends a 6-digit verification code to your phone (valid for 3 minutes, uses SMS credit).
Takes no parameters.
401 UnauthorizedBearer tms_pat_....403 ACCESS_DENIED403 IP_NOT_ALLOWEDCREDIT_INSUFFICIENTOTP_NOT_DONErequest_leave_otp.429 Too Many RequestsRetry-After seconds given in the response, then retry.find_api_endpoints cannot find an action, or describe_api_endpoint says "not found", the token owner lacks the permission for it or the endpoint is closed to MCP (login, tokens, passwords). Ask your company administrator for the permission; a new permission applies right away.The data you can see in Teamso. The token uses your permissions; unless you are a manager you cannot approve others' leave, and you only see your own payslips.
The hosted server neither stores nor logs the token; it forwards the request and forgets it. Teamso keeps only a hash of the token.
Only operations that need SMS confirmation do, and they cost the same as in the web app: creating a leave request uses 1 digital credit for each person it is created for; cancelling a leave request uses 2 digital credits (one for the deletion, one for timestamping the cancellation document). Read tools and help tools use none.
Yes. Run the open-source npm package locally or on your own server; see the Self-hosted MCP guide. Self-hosted MCP
With Revoke on the token's row on the MCP access page; requests with that token are rejected immediately.