Self-hosted Teamso MCP
Teamso MCP sunucusunu açık kaynak npm paketiyle (@teamso/teamso-mcp) kendi bilgisayarınızda npx ile ya da kendi sunucunuzda çalıştırın. İstemci ile Teamso API'si arasında başka sunucu yoktur.
Hızlı başlangıç
Node.js 20 ya da üstü gerekir. MCP istemcinizin yapılandırmasına ekleyin:
{
"mcpServers": {
"teamso": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@teamso/[email protected]"
],
"env": {
"TEAMSO_ACCESS_TOKEN": "tms_pat_..."
}
}
}
}Sürüm sabittir; böylece npx önbellekteki eski bir sürümü çalıştırmaz.
Kurulum
Paket stdio üzerinden çalışır; stdio destekleyen her MCP istemcisiyle kullanılır.
Cursor
Cmd+Shift+P → Open MCP settings ile ~/.cursor/mcp.json dosyasını açın ve ekleyin:
{
"mcpServers": {
"teamso": {
"command": "npx",
"args": [
"-y",
"@teamso/[email protected]"
],
"env": {
"TEAMSO_ACCESS_TOKEN": "tms_pat_..."
}
}
}
}Claude Code
Token'ı ortam değişkeni olarak vererek ekleyin:
claude mcp add teamso --env TEAMSO_ACCESS_TOKEN=tms_pat_... -- npx -y @teamso/[email protected]Claude Desktop
claude_desktop_config.json dosyasına ekleyin ve Claude Desktop'u yeniden başlatın:
{
"mcpServers": {
"teamso": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@teamso/[email protected]"
],
"env": {
"TEAMSO_ACCESS_TOKEN": "tms_pat_..."
}
}
}
}Windsurf
Windsurf → Settings → MCP yapılandırmasına ekleyin:
{
"mcpServers": {
"teamso": {
"command": "npx",
"args": [
"-y",
"@teamso/[email protected]"
],
"env": {
"TEAMSO_ACCESS_TOKEN": "tms_pat_..."
}
}
}
}Diğer istemciler
Stdio destekleyen her istemci şu komutu çalıştırabilir; token TEAMSO_ACCESS_TOKEN ortam değişkeninden okunur:
TEAMSO_ACCESS_TOKEN=tms_pat_... npx -y @teamso/[email protected]Kimlik doğrulama
Paket tek bir kimlik bilgisi kullanır: Teamso'da MCP erişimi sayfasından oluşturduğunuz kişisel erişim token'ı. Token'ı TEAMSO_ACCESS_TOKEN değişkenine yazın; paket her isteğe Authorization: Bearer başlığı olarak ekler.
TEAMSO_ACCESS_TOKEN=tms_pat_...Yerel pakette istekler sizin IP adresinizden gelir; şirketinizde IP kısıtlaması varsa bu adres izinli olmalı. Yetkiler, token'la yapılamayan işlemler ve iptal kuralları hosted sunucuyla aynıdır.
Araçlar
Paket hosted sunucuyla aynı 34 aracı sunar. Tabloda her aracın çağırdığı Teamso REST ucu (TEAMSO_API_BASE_URL'e göre) yer alır; yardım araçları API yerine herkese açık kılavuz paketini okur.
Paket 1.2.0'dan beri genel API araçlarıyla (find_api_endpoints, call_api_read, call_api_write...) yetkinizin açtığı tüm modüllerde çalışır. Akış, güvenlik kuralları ve örnekler hosted sunucu sayfasındadır.
Hosted MCP sunucusu · Tüm modüller
Yardım
Teamso kullanım kılavuzlarında arar. API'yi çağırmaz, herkese açık kılavuz paketini okur.
| Araç | API ucu | Ne yapar |
|---|---|---|
search_help_articles | GET {TEAMSO_HELP_BASE_URL}/how-to/bundle.{lang}.json | Teamso kılavuzlarında anahtar kelimeyle arar; modüle ve role göre süzer. |
get_help_article | GET {TEAMSO_HELP_BASE_URL}/how-to/bundle.{lang}.json | Bir kılavuzu adımlarıyla birlikte tam metin döndürür. |
list_help_modules | GET {TEAMSO_HELP_BASE_URL}/how-to/bundle.{lang}.json | Kılavuzu olan modülleri, her modülün makale başlıkları ve kimlikleriyle listeler. |
Hesap
Token sahibini ve yetkilerini döndürür.
| Araç | API ucu | Ne yapar |
|---|---|---|
get_me | GET /user | Adınız, e-postanız, şirketiniz, rolleriniz, yetki kodlarınız, yöneticiniz, departman ve pozisyonunuz. |
İzin
İzin talebi oluşturmak ve iptal etmek telefonunuza gelen SMS koduyla onaylanır: kod 3 dakika geçerlidir ve dijital kredi harcar.
| Araç | API ucu | Ne yapar |
|---|---|---|
list_leave_types | GET /leave-policy/getListAllLeavePolicyForUserGET /leave-policy/getDetailLeavePolicyForUser/{id} | Talep edebileceğiniz izin türleri ve her birinde kalan hakkınız. |
get_my_leave_balance | GET /leave-policy/getListAllLeavePolicyForUserGET /leave-policy/getDetailLeavePolicyForUser/{id} | İzin bakiyenizin özeti: tür bazında kalan gün. |
calculate_leave_days | GET /working-days/getWorkingDaysByMeGET /public-holiday/getPublicHolidayByMeGET /leave/dayCalculator/{workingDaysId}/{publicHolidayId}/{leaveTypeId}/{start}/{end}POST /leave/controlToAddLeave | Tarih aralığının kaç iş günü tuttuğunu ve işe dönüş tarihini hesaplar; çalışma takviminiz ve resmi tatiller dikkate alınır. |
request_leave_otp | GET /sms/generateToken?checkCredit=true | Telefonunuza onay kodu gönderir (3 dakika geçerli, SMS kredisi harcar). |
create_leave_request | GET /leave/dayCalculator/…POST /leave/controlToAddLeaveGET /sms/checkToken/{code}POST /leave | SMS kodunu doğrular, günleri yeniden hesaplar ve talebi onay akışına gönderir. |
list_my_leaves | GET /leave/listAllLeavesAdvancedPagination | Kendi izin talepleriniz; tarihe ve duruma göre süzülebilir. |
cancel_leave_request | GET /leave/listAllLeavesAdvancedPaginationGET /sms/checkToken/{code}DELETE /leave/{id} | SMS koduyla onaylanan bir izin talebini siler; izin silme yetkisi gerekir. |
Onaylar
Onay sırası sizde olan izin talepleri.
| Araç | API ucu | Ne yapar |
|---|---|---|
list_pending_approvals | GET /leave/listAllLeavesAdvancedPagination?searchKey=state&searchValue=0 | Onayınızı bekleyen izin talepleri. |
approve_or_reject_leave | GET /leave/listAllLeavesAdvancedPagination?searchKey=state&searchValue=0PUT /leave/state/{id}/{approve}/{answer} | Talebi onaylar ya da reddeder; önce onay sırasının sizde olduğunu denetler. Reddetmek gerekçe ister. |
Çalışanlar
Yalnız görme yetkiniz olan çalışanlar.
| Araç | API ucu | Ne yapar |
|---|---|---|
search_employees | GET /user/list-paginationGET /authorized-employee/list | Aktif çalışanları ad ya da e-postayla arar (Türkçe karakter duyarsız). Şirket rehberini görme yetkiniz yoksa sorumlu olduğunuz çalışanlarda arar. |
get_employee_profile | GET /user/getUserSummaryByUserId/{userId} | Çalışanın iş profili: şube, departman, pozisyon, yönetici, çalışma yeri ve iletişim (telefonu görme yetkiniz yoksa maskelenir). |
Performans
Hedefler döneme adıyla (list_performance_periods'taki title) bağlanır; hedef araçlarından önce dönemleri listeleyin.
| Araç | API ucu | Ne yapar |
|---|---|---|
list_performance_periods | GET /performance-settings | Performans dönemleri, hedef giriş tarihleri ve değerlendirme skalası. |
list_my_goals | GET /user-goal/my | Dönemdeki hedefleriniz ve her birinde yapabileceğiniz işlemler. |
list_team_goals | GET /user-goal/assigned | Yönettiğiniz ya da hedef atadığınız çalışanların hedefleri (taslaklar hariç) ve her birinde verebileceğiniz onaylar. |
create_user_goal | GET /performance-settingsPOST /user-goal | Kendinize ya da size doğrudan bağlı bir çalışana taslak hedef ekler (performans yöneticisi herkese ekleyebilir). |
send_goals_to_approval | POST /user-goal/send-to-approval | Taslak (PENDING) hedeflerinizi yöneticinizin onayına gönderir. |
approve_goal | GET /user-goal/approve/{goalId} | Onay bekleyen bir hedefi onaylar. |
revise_and_approve_goal | GET /user-goal/{goalId}PUT /user-goal/revise-and-approve/{goalId} | Hedefi düzelterek (ad, açıklama, ağırlık, hedef değer) onaylar. |
update_goal_actual_value | GET /performance-settingsPUT /user-goal/{goalId}/actual-value | Değerlendirmedeki hedefe gerçekleşen değerinizi girer. |
update_manager_actual_value | GET /performance-settingsPUT /user-goal/{goalId}/manager-actual-value | Çalışanın doğrudan yöneticisi ya da yetkili yönetici olarak hedefin gerçekleşen değerini girer. |
approve_goal_evaluation | GET /performance-settingsPOST /user-goal/approve-evaluation-process | Çalışanın dönem değerlendirmesini sizin onay adımınızda onaylar; son adımda Teamso sonuç puanını hesaplar. |
İletişim
Size görünen duyurular.
| Araç | API ucu | Ne yapar |
|---|---|---|
list_announcements | GET /dashboard/getAnnouncements | Size görünen şirket ve servis duyuruları, en yenisi önce. |
Bordro
Yalnız kendi bordro pusulalarınız.
| Araç | API ucu | Ne yapar |
|---|---|---|
list_my_payslips | GET /payroll/getPayrollsByMe-pagination | E-bordro pusulalarınız ve durumları; aya ya da yıla göre süzülebilir. |
get_payslip_pdf | GET /payroll/download-file/{payrollId} | Bordro pusulasının PDF'ini gömülü kaynak olarak döndürür. |
Tüm modüller
Teamso'nun geri kalanı (masraf, talep, fazla mesai, puantaj, bordro, işe alım, demirbaş, ayarlar...) genel API araçlarıyla. Yalnız sizin yetkinizin açtığı uçlar listelenir ve çağrılır; okuma araçları veri değiştiremez, yazma araçları önce önizleme gösterir.
| Araç | API ucu | Ne yapar |
|---|---|---|
find_api_endpoints | GET /mcp-catalog/endpoints?q=&module=&method=&page=&size= | Yetkinizin açtığı Teamso API uçlarında anahtar kelimeyle (Türkçe ya da İngilizce), modüle, HTTP yöntemine ya da etkiye (okuma, yazma, silme) göre arar. Her sonuçta uç kimliği, özet, etki ve SMS kodu ya da dosya bilgisi vardır. |
list_api_modules | GET /mcp-catalog/modules | Kullanabildiğiniz modülleri ve her modülde size açık uç sayısını listeler. |
describe_api_endpoint | GET /mcp-catalog/endpoint?id={METHOD /path} | Bir ucun parametrelerini, gövde şemasını, yanıt türünü, SMS kodu gerekip gerekmediğini ve hazır bir örnek çağrıyı gösterir. |
call_api_read | GET /mcp-catalog/endpoint?id={METHOD /path}GET /{path} + X-Teamso-Mcp-Intent: readPOST /{path} + X-Teamso-Mcp-Intent: read | Yalnız okuma uçlarını çalıştırır ve veriyi döndürür. İstek salt okunur işaretlenir; Teamso veri değiştirecek her isteği reddeder. Büyük listeler kısaltılır, dosyalar (PDF, Excel, CSV, görsel) 8 MB'a kadar gömülü dosya olarak gelir. |
call_api_write | GET /mcp-catalog/endpoint?id={METHOD /path}GET /sms/checkToken/{code}POST /{path}PUT /{path}PATCH /{path}DELETE /{path} | Kayıt ekler, değiştirir ya da siler. confirm olmadan hiçbir şey göndermez, isteğin önizlemesini ve şema kontrolünü döndürür; ancak siz onayladıktan sonra confirm=true ile çalışır. SMS kodu isteyen işlemlerde otp_code alır, dosyaları base64 olarak yükler (toplam 10 MB). |
request_sms_code | GET /sms/generateToken?checkCredit=true | SMS kodu isteyen bir işlemi onayladıktan sonra telefonunuza 6 haneli doğrulama kodu gönderir (3 dakika geçerli, SMS kredisi harcar). |
Distribütör hesabının içerik araçları pakette yoktur; yalnız hosted sunucuda sunulur.
Hazır prompt'lar
Sunucu araçların yanında MCP prompt'ları da yayımlar (prompts/list, prompts/get); istemciniz bunları eğik çizgi komutu ya da prompt seçici olarak gösterir. Prompt yalnız asistanı araçlar üzerinden yönlendirir: her yazma işlemi yine onayınızı, izin talebi de SMS kodunu ister.
| Prompt | Argümanlar | Ne yapar |
|---|---|---|
request_leave | start (isteğe bağlı)İznin ilk günü: yyyy-MM-dd ya da “yarın” gibi bir ifade (Türkiye saatine göre).end (isteğe bağlı)İznin son günü (yyyy-MM-dd); boşsa başlangıçla aynı gün.leave_type (isteğe bağlı)İzin türünün adı, ör. “Yıllık İzin”; boşsa yıllık izin.note (isteğe bağlı)Onaylayana not. | Oturum açan kullanıcı için izin talebi oluşturur: izin türünü seçer, iş günlerini ve kalan bakiyeyi gösterir, onayınızı alır ve talebi SMS koduyla gönderir. Eksik tarihleri sorar. Araç zinciri: list_leave_typescalculate_leave_daysrequest_leave_otpcreate_leave_request |
review_pending_approvals | Argüman almaz. | Onayınızı bekleyen izin taleplerini tablo olarak listeler ve her biri için onay mı ret mi istediğinizi sorar; kararı hiçbir zaman sizin yerinize vermez. Ret için gerekçe ister. Araç zinciri: list_pending_approvalsapprove_or_reject_leave |
Prompt'lar paketin 1.1.0 sürümünde eklendi ve createMcpServer bunları araçlarla birlikte kaydeder. Kendi sunucunuzda registerPrompts ve PROMPT_NAMES dışa aktarımlarını (@teamso/teamso-mcp/prompts) kullanabilirsiniz.
Ortam değişkenleri
Paket şu ortam değişkenlerini okur:
| Değişken | Zorunlu | Açıklama |
|---|---|---|
TEAMSO_ACCESS_TOKEN | Evet | Teamso kişisel erişim token'ı (tms_pat_...). |
TEAMSO_API_BASE_URL | Hayır | Teamso API adresi; test ortamı ya da özel kurulum için değiştirin.Varsayılan: https://api.teamso.com/v1 |
TEAMSO_HELP_BASE_URL | Hayır | Kılavuz paketinin (/how-to/bundle.tr.json) okunduğu site adresi.Varsayılan: https://teamso.com |
TEAMSO_TOOLSETS | Hayır | Sunulacak araç grupları, virgülle: core, help, leave, approvals, employees, performance, communication, payroll, api. Bilinmeyen bir ad sunucuyu durdurur ve geçerli adları yazar.Varsayılan: all |
TEAMSO_TOOLSETS=core,leave,apiGitHub ve npm
Kaynak kod MIT lisansıyla GitHub'da, paket npm'de yayımlanır.
- GitHub: Teamsocom/Teamso-MCP
- npm: @teamso/teamso-mcp
Kütüphane olarak kullanım
Paket, kendi MCP sunucunuzu kurmanız için çekirdek parçalarını dışa aktarır:
import { TeamsoClient } from "@teamso/teamso-mcp/client";
import { createMcpServer } from "@teamso/teamso-mcp/server";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
const client = new TeamsoClient(process.env.TEAMSO_ACCESS_TOKEN!, "https://api.teamso.com/v1");
const server = createMcpServer(client, { name: "my-teamso-assistant" });
await server.connect(new StdioServerTransport());Dışa aktarılanlar
| Dışa aktarım | Açıklama |
|---|---|
createMcpServer(client, options?)@teamso/teamso-mcp/server | Tüm araçları kayıtlı bir McpServer oluşturur; ad, sürüm ve yönergeler verilebilir. |
TeamsoClient@teamso/teamso-mcp/client | Teamso API istemcisi: token, temel adres ve isteğe bağlı ayarlar. |
TeamsoApiError@teamso/teamso-mcp/client | Teamso'nun reddettiği istek: status, messageCode, apiMessage ve yanıt gövdesi (body). |
registerTools(server, client)@teamso/teamso-mcp/tools | Araçları var olan bir McpServer'a kaydeder. |
TOOL_NAMES@teamso/teamso-mcp/tools | Paketin sunduğu araç adlarının listesi. |
TOOLSETS, resolveToolsets(toolsets)@teamso/teamso-mcp/tools | Araç grupları ve seçimi doğrulayan resolveToolsets; createMcpServer ve registerTools toolsets seçeneğini alır. |
registerPrompts(server)@teamso/teamso-mcp/prompts | Hazır prompt'ları var olan bir McpServer'a kaydeder. |
PROMPT_NAMES@teamso/teamso-mcp/prompts | Paketin sunduğu prompt adlarının listesi. |
withJsonSchema2020_12(transport)@teamso/teamso-mcp/server | Herhangi bir transport'ta tools/list şemalarını JSON Schema 2020-12'ye çevirir. |
signProxyRequest(input)@teamso/teamso-mcp/client | Güvenilir proxy imzası; doğrulayıcılar ve testler için. |
VERSION@teamso/teamso-mcp/server | Paket sürümü. |
Parçaları ayrı ayrı da içe aktarabilirsiniz:
import { TeamsoClient } from "@teamso/teamso-mcp/client";
import { registerTools, TOOL_NAMES } from "@teamso/teamso-mcp/tools";
registerTools(existingMcpServer, new TeamsoClient(token));
console.log(TOOL_NAMES); // ["search_help_articles", "get_help_article", ...]Başkalarının isteklerini ileten bir sunucu, Teamso'nun şirket IP kısıtlamasını ve denetim kaydını gerçek kullanıcıya uygulaması için çağıranın IP'sini imzalayabilir. Gizli anahtar API'deki security.mcp-proxy.shared-secret ile aynı olmalı (en az 32 karakter):
const client = new TeamsoClient(userToken, "https://api.teamso.com/v1", {
trustedProxy: { clientIp: request.ip, sharedSecret: process.env.TEAMSO_MCP_PROXY_SECRET! },
});Kendi sunucunuzda
Kaynaktan derleyip kendi sunucunuzda çalıştırın (Node.js 20+):
git clone https://github.com/Teamsocom/Teamso-MCP.git
cd Teamso-MCP
npm ci
npm run build
export TEAMSO_ACCESS_TOKEN=tms_pat_...
node dist/index.jsİstemcinizi npx yerine bu derlemeye yönlendirin:
{
"mcpServers": {
"teamso": {
"command": "node",
"args": [
"/absolute/path/to/Teamso-MCP/dist/index.js"
],
"env": {
"TEAMSO_ACCESS_TOKEN": "tms_pat_..."
}
}
}
}Paket kurulurken kendini derler (prepare), bu yüzden etiketli bir sürüm doğrudan GitHub'dan da kurulabilir:
npm install github:Teamsocom/Teamso-MCP#v1.2.1Sürekli çalışan bir süreç için systemd ya da pm2 gibi bir süreç yöneticisi kullanın; token'ı ortam değişkeni ya da gizli dosyayla verin, depoya yazmayın.