systa-mcp 1.5.0 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SKILL.md +3 -3
- package/package.json +1 -1
- package/server.js +12 -7
package/SKILL.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
version: 1.5.
|
|
2
|
+
version: 1.5.1
|
|
3
3
|
name: systa
|
|
4
4
|
description: |
|
|
5
5
|
Drive SysTa (Talep Takip Sistemi / SysTa) — a
|
|
@@ -79,7 +79,7 @@ Short shared vocabulary. Use these words with the user; never expose raw REST pa
|
|
|
79
79
|
| --------------------- | ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
80
80
|
| Talep | Request / ticket | Core unit of work. Has `title` (min 5), `companyId`, `statusId`, priority, category, assignee, comments, files, relations. Çoğu iş bir talebin etrafında döner. |
|
|
81
81
|
| Durum | Status | Lifecycle state (Açık/Open, Devam Ediyor/In Progress, Tamamlandı/Done). `is_final` durumlar kapanışı temsil eder. Resolved via `GET /api/statuses`. |
|
|
82
|
-
| Öncelik | Priority | normal / high / critical. Belirtilmezse `normal`.
|
|
82
|
+
| Öncelik | Priority | low / normal / high / urgent / critical. Belirtilmezse `normal`. |
|
|
83
83
|
| Kategori | Category | Talep sınıflandırması (catalog/config). |
|
|
84
84
|
| Yorum | Comment | Talebe eklenen not/yorum (`commentText` plain string ok). |
|
|
85
85
|
| Atama | Assignment | `assignedTo` = bir kullanıcı. "bana/üzerime" → mevcut `userId`. |
|
|
@@ -209,7 +209,7 @@ Each maps a P0 user verb to a tool/endpoint, with the opinionated defaults from
|
|
|
209
209
|
|
|
210
210
|
### Üzerimdeki işler / talepleri listele (what's on my plate) — `list_requests` → `GET /api/requests`
|
|
211
211
|
|
|
212
|
-
- "taleplerim / on me" → `assignedTo=<my userId>`. "açık/open" → `openOnly:true`. "geciken/overdue" → `overdue:true` (deadline geçmiş + non-final auto-composed) veya `slaBreached:true` (SLA ihlali). "SLA durumu" → `slaStatus:['breached','active']`. **"dosyalı talepler / eki olan" → `hasAttachments:true`** (top-level talep eki). Deadline'a göre → `deadlineFrom`/`deadlineTo` (YYYY-MM-DD) ya da `deadlineWithinDays:N` (önümüzdeki N gün). Search kapsamını genişlet: `searchIn:['assignee','creator','comments',...]`. **Response boyutu:** `fields` varsayılan `'summary'` (satır başına ~1KB); `'detail'` (description/effort/counts eklenir) veya `'full'` (customFields/stakeHolders dahil, çok büyük). Default `limit=20-50`, sort `created_at desc`. Yanıt zarfı: `{
|
|
212
|
+
- "taleplerim / on me" → `assignedTo=<my userId>`. "açık/open" → `openOnly:true`. "geciken/overdue" → `overdue:true` (deadline geçmiş + non-final auto-composed) veya `slaBreached:true` (SLA ihlali). "SLA durumu" → `slaStatus:['breached','active']`. **"dosyalı talepler / eki olan" → `hasAttachments:true`** (top-level talep eki). Deadline'a göre → `deadlineFrom`/`deadlineTo` (YYYY-MM-DD) ya da `deadlineWithinDays:N` (önümüzdeki N gün). **`overdue` ile `deadlineWithinDays` birlikte kullanılmaz** — ikisi aynı arka uç parametresine yazar, birlikte verilirse `overdue` kazanır ve diğeri sessizce yok sayılır (zaten ters soruları sorarlar: geçmiş vs. yaklaşan). Search kapsamını genişlet: `searchIn:['assignee','creator','comments',...]`. **Response boyutu:** `fields` varsayılan `'summary'` (satır başına ~1KB); `'detail'` (description/effort/counts eklenir) veya `'full'` (customFields/stakeHolders dahil, çok büyük). Default `limit=20-50`, sort `created_at desc`. Yanıt zarfı: `data.requests[]` + `data.pagination{total, limit, offset, page, totalPages}` — dizinin anahtarı `requests`'tir (`items` DEĞİL) ve ikisi de `data` altındadır. Summarize as a short list (numara + başlık + durum), not raw rows.
|
|
213
213
|
|
|
214
214
|
### Talep detayı (show a request) — `get_request` → `GET /api/requests/:requestNumber`
|
|
215
215
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "systa-mcp",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.1",
|
|
4
4
|
"description": "MCP stdio server for SysTa (Talep Takip Sistemi) — lets AI agents (Claude, Codex) use the SysTa REST API via a scoped API key. Zero npm dependencies (native Node).",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "server.js",
|
package/server.js
CHANGED
|
@@ -44,7 +44,7 @@ const INSTRUCTIONS = [
|
|
|
44
44
|
'cagri yine de sunucu tarafinda 403 doner. Bir isi yapmadan ONCE:',
|
|
45
45
|
' 1) `list_capabilities` cagir — anahtarin erisebildigi modul/endpoint katalogunu',
|
|
46
46
|
' (scope-filtreli) gorursun. GENIS/WILDCARD anahtarda ONCE `list_capabilities({summary:true})`',
|
|
47
|
-
' cagir (oryantasyon + modul indeksi,
|
|
47
|
+
' cagir (oryantasyon + modul indeksi, ~57 KB; compact katalog ~483 KB, projeksiyonsuz cagri megabaytlara cikar), sonra',
|
|
48
48
|
' ilgili modul icin `list_capabilities({module:"<ad>"})` ile derinles. Yetkisiz endpoint listede GORUNMEZ. Yanit AYRICA SysTa',
|
|
49
49
|
' platform OZETI (overview), TR GLOSSARY, her modulun ACIKLAMASINI (description/concepts)',
|
|
50
50
|
' ve SENIN kullanicini (user) icerir — "ben / bana ata / uzerimdeki" niyetinde assignedTo',
|
|
@@ -757,8 +757,9 @@ const shapeCompact = (caps) => ({
|
|
|
757
757
|
/**
|
|
758
758
|
* Index-only view: orientation (overview/glossary/user) + module names with
|
|
759
759
|
* endpoint COUNTS, but NO per-endpoint detail. For a wildcard '*' key the full
|
|
760
|
-
* compact catalog is ~
|
|
761
|
-
* buffers; this summary is
|
|
760
|
+
* compact catalog is ~483KB (69 modules / 1663 endpoint-methods, olculdu 2026-08-30)
|
|
761
|
+
* which overflows agent buffers; this summary is ~57KB. Drill into one module with
|
|
762
|
+
* module='x' (~54KB) or straight to describe_endpoint (~22KB).
|
|
762
763
|
*/
|
|
763
764
|
const shapeSummary = (caps) => ({
|
|
764
765
|
sessionType: caps.sessionType,
|
|
@@ -1093,7 +1094,7 @@ const MODULE_GATE_NOTE =
|
|
|
1093
1094
|
const TOOLS = [
|
|
1094
1095
|
{
|
|
1095
1096
|
name: 'list_requests',
|
|
1096
|
-
description: `List/search SysTa requests (talepler) with pagination and rich filters: status, assignee, company, category, department, priority, free-text, OVERDUE / SLA / DEADLINE. Common intents: 'uzerimdeki acik isler / my open work' => assignedTo=<me> + openOnly:true (excludes final statuses). 'geciken isler / overdue' => overdue:true (deadline gecmis + non-final) OR slaBreached:true (SLA ihlali). 'bu ay kapatilan' => finalOnly:true + completedFrom/completedTo (NOT YET SUPPORTED — use systa_api_call). search covers title/requestNumber/description/externalRef by default (NOT assignee/creator); use searchIn to expand. Multiple statuses: statusId can be an array [1,3,5]. Returns only requests the API key scope permits. Response envelope:
|
|
1097
|
+
description: `List/search SysTa requests (talepler) with pagination and rich filters: status, assignee, company, category, department, priority, free-text, OVERDUE / SLA / DEADLINE. Common intents: 'uzerimdeki acik isler / my open work' => assignedTo=<me> + openOnly:true (excludes final statuses). 'geciken isler / overdue' => overdue:true (deadline gecmis + non-final) OR slaBreached:true (SLA ihlali). 'bu ay kapatilan' => finalOnly:true + completedFrom/completedTo (NOT YET SUPPORTED — use systa_api_call). search covers title/requestNumber/description/externalRef by default (NOT assignee/creator); use searchIn to expand. Multiple statuses: statusId can be an array [1,3,5]. Returns only requests the API key scope permits. Response envelope: data.requests[] + data.pagination{total,limit,offset,page,totalPages} — the array key is 'requests' (NOT 'items') and both live under 'data'. Verified against the endpoint Response Contract v2 (required: [requests, pagination]). RESPONSE SIZE: fields controls how much each row carries -- default 'summary' returns lightweight rows (~1KB each: id, requestNumber, title, statusName, priority, assignedTo, deadline, isOverdue, slaStatus, commentCount, fileCount). Use fields:'detail' when you need description/effort/counts, or fields:'full' for everything incl. customFields/stakeHolders (LARGE — S-A2 kanit: 44 talep tam moduyla ~300KB).${MASKING_NOTE}${EMPTY_SCOPE_NOTE}`,
|
|
1097
1098
|
inputSchema: {
|
|
1098
1099
|
type: 'object',
|
|
1099
1100
|
additionalProperties: false,
|
|
@@ -1161,7 +1162,8 @@ const TOOLS = [
|
|
|
1161
1162
|
overdue: {
|
|
1162
1163
|
type: 'boolean',
|
|
1163
1164
|
description:
|
|
1164
|
-
'true => geciken/overdue: deadline in the past AND not in a final status. Shorthand for deadlineDaysRemaining[operator]=lt&deadlineDaysRemaining[value]=0 combined with openOnly.'
|
|
1165
|
+
'true => geciken/overdue: deadline in the past AND not in a final status. Shorthand for deadlineDaysRemaining[operator]=lt&deadlineDaysRemaining[value]=0 combined with openOnly. ' +
|
|
1166
|
+
'MUTUALLY EXCLUSIVE with deadlineWithinDays (same backend parameter pair); when both are set, overdue WINS.',
|
|
1165
1167
|
},
|
|
1166
1168
|
slaStatus: {
|
|
1167
1169
|
type: 'array',
|
|
@@ -1188,7 +1190,10 @@ const TOOLS = [
|
|
|
1188
1190
|
deadlineWithinDays: {
|
|
1189
1191
|
type: 'integer',
|
|
1190
1192
|
description:
|
|
1191
|
-
'Deadline within N days from now (i.e. deadlineDaysRemaining[operator]=lte,value=N).'
|
|
1193
|
+
'Deadline within N days from now (i.e. deadlineDaysRemaining[operator]=lte,value=N). ' +
|
|
1194
|
+
'MUTUALLY EXCLUSIVE with overdue: both map to the same backend parameter pair, so ' +
|
|
1195
|
+
'if overdue is also set this one is IGNORED. Pick one — they ask opposite questions ' +
|
|
1196
|
+
'(already late vs. due soon).',
|
|
1192
1197
|
},
|
|
1193
1198
|
fields: {
|
|
1194
1199
|
type: 'string',
|
|
@@ -3460,7 +3465,7 @@ The number is the request number for "#", and the card's GLOBAL id for "##" (NOT
|
|
|
3460
3465
|
'shown), each with its HTTP methods, safety class (read_only/idempotent/mutating/' +
|
|
3461
3466
|
'destructive) and required permission. Also returns SysTa overview, TR glossary and your ' +
|
|
3462
3467
|
'user (who-am-i). Call this FIRST. For a broad key the full catalog can be large: pass ' +
|
|
3463
|
-
'summary=true to get only orientation + module names with endpoint counts (
|
|
3468
|
+
'summary=true to get only orientation + module names with endpoint counts (~57KB vs ~483KB compact), then ' +
|
|
3464
3469
|
`pass module="<name>" to drill into one module. No args = full compact catalog.${MODULE_GATE_NOTE}`,
|
|
3465
3470
|
inputSchema: {
|
|
3466
3471
|
type: 'object',
|