Geliştiriciler

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:

mcp.json
{
  "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:

~/.cursor/mcp.json
{
  "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:

bash
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:

claude_desktop_config.json
{
  "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:

mcp_config.json
{
  "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:

bash
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.

.env
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.

Hosted MCP sunucusu · Kimlik doğrulama

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 ucuNe 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 ucuNe 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 ucuNe 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 ucuNe 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 ucuNe 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 ucuNe 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 ucuNe 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 ucuNe 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 ucuNe 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.

PromptArgümanlarNe 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_approvalsArgü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şkenZorunluAçıklama
TEAMSO_ACCESS_TOKENEvetTeamso kişisel erişim token'ı (tms_pat_...).
TEAMSO_API_BASE_URLHayırTeamso API adresi; test ortamı ya da özel kurulum için değiştirin.Varsayılan: https://api.teamso.com/v1
TEAMSO_HELP_BASE_URLHayırKılavuz paketinin (/how-to/bundle.tr.json) okunduğu site adresi.Varsayılan: https://teamso.com
TEAMSO_TOOLSETSHayırSunulacak 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
.env
TEAMSO_TOOLSETS=core,leave,api

GitHub ve npm

Kaynak kod MIT lisansıyla GitHub'da, paket npm'de yayımlanır.

Kütüphane olarak kullanım

Paket, kendi MCP sunucunuzu kurmanız için çekirdek parçalarını dışa aktarır:

server.ts
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ımAçıklama
createMcpServer(client, options?)@teamso/teamso-mcp/serverTüm araçları kayıtlı bir McpServer oluşturur; ad, sürüm ve yönergeler verilebilir.
TeamsoClient@teamso/teamso-mcp/clientTeamso API istemcisi: token, temel adres ve isteğe bağlı ayarlar.
TeamsoApiError@teamso/teamso-mcp/clientTeamso'nun reddettiği istek: status, messageCode, apiMessage ve yanıt gövdesi (body).
registerTools(server, client)@teamso/teamso-mcp/toolsAraçları var olan bir McpServer'a kaydeder.
TOOL_NAMES@teamso/teamso-mcp/toolsPaketin sunduğu araç adlarının listesi.
TOOLSETS, resolveToolsets(toolsets)@teamso/teamso-mcp/toolsAraç grupları ve seçimi doğrulayan resolveToolsets; createMcpServer ve registerTools toolsets seçeneğini alır.
registerPrompts(server)@teamso/teamso-mcp/promptsHazır prompt'ları var olan bir McpServer'a kaydeder.
PROMPT_NAMES@teamso/teamso-mcp/promptsPaketin sunduğu prompt adlarının listesi.
withJsonSchema2020_12(transport)@teamso/teamso-mcp/serverHerhangi bir transport'ta tools/list şemalarını JSON Schema 2020-12'ye çevirir.
signProxyRequest(input)@teamso/teamso-mcp/clientGüvenilir proxy imzası; doğrulayıcılar ve testler için.
VERSION@teamso/teamso-mcp/serverPaket sürümü.

Parçaları ayrı ayrı da içe aktarabilirsiniz:

tools.ts
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):

proxy.ts
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+):

bash
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:

mcp.json
{
  "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:

bash
npm install github:Teamsocom/Teamso-MCP#v1.2.1

Sü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.