@gor-dev/yandex-tracker-mcp 1.0.0

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Sergey Gorban
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,250 @@
1
+ # Yandex Tracker MCP Server
2
+
3
+ MCP (Model Context Protocol) server for integrating with Yandex Tracker API. This server enables LLMs to interact with Yandex Tracker to manage issues, track time, and query project data.
4
+
5
+ ## Features
6
+
7
+ - **Get Issue Data**: Retrieve detailed information about any issue by its key
8
+ - **Update Issues**: Modify issue fields including status, assignee, estimates, and more
9
+ - **Time Tracking**: Add and retrieve worklog entries (time spent records)
10
+ - **Search Issues**: Query issues using Yandex Tracker's query language
11
+ - **Dual Response Formats**: Get data in JSON (for processing) or Markdown (for readability)
12
+
13
+ ## Installation
14
+
15
+ ### Quick Install (npx - Recommended)
16
+
17
+ No installation needed! Use directly with npx:
18
+
19
+ ```bash
20
+ claude mcp add yandex-tracker \
21
+ -e YANDEX_TRACKER_TOKEN="your_token" \
22
+ -e YANDEX_TRACKER_ORG_ID="your_org_id" \
23
+ -- npx -y yandex-tracker-mcp-server
24
+ ```
25
+
26
+ ### Manual Installation
27
+
28
+ ```bash
29
+ npm install
30
+ npm run build
31
+ ```
32
+
33
+ ## Configuration
34
+
35
+ The server requires authentication credentials to access Yandex Tracker API:
36
+
37
+ ### Option 1: OAuth Token (recommended)
38
+
39
+ 1. Get your OAuth token from [Yandex OAuth](https://oauth.yandex.ru/)
40
+ 2. Find your organization ID in Yandex Tracker settings
41
+
42
+ Set environment variables:
43
+ ```bash
44
+ export YANDEX_TRACKER_TOKEN="your_oauth_token"
45
+ export YANDEX_TRACKER_ORG_ID="your_org_id"
46
+ ```
47
+
48
+ ### Option 2: IAM Token (for Yandex Cloud)
49
+
50
+ For Yandex Cloud organizations, use IAM tokens:
51
+
52
+ ```bash
53
+ export YANDEX_TRACKER_IAM_TOKEN="your_iam_token"
54
+ export YANDEX_TRACKER_CLOUD_ORG_ID="your_cloud_org_id"
55
+ ```
56
+
57
+ ### Claude CLI Integration (Recommended)
58
+
59
+ **Quick install with script:**
60
+ ```bash
61
+ ./install-to-claude-cli.sh
62
+ ```
63
+
64
+ **Or manually:**
65
+ ```bash
66
+ claude mcp add yandex-tracker \
67
+ -e YANDEX_TRACKER_TOKEN="your_oauth_token" \
68
+ -e YANDEX_TRACKER_ORG_ID="your_org_id" \
69
+ -- node /path/to/yandex-tracker-mcp-server/dist/index.js
70
+ ```
71
+
72
+ See [CLAUDE_CLI_SETUP.md](./CLAUDE_CLI_SETUP.md) for detailed instructions.
73
+
74
+ ### Claude Desktop Integration
75
+
76
+ Add to your Claude Desktop configuration (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
77
+
78
+ ```json
79
+ {
80
+ "mcpServers": {
81
+ "yandex-tracker": {
82
+ "command": "node",
83
+ "args": ["/path/to/yandex-tracker-mcp-server/dist/index.js"],
84
+ "env": {
85
+ "YANDEX_TRACKER_TOKEN": "your_oauth_token",
86
+ "YANDEX_TRACKER_ORG_ID": "your_org_id"
87
+ }
88
+ }
89
+ }
90
+ }
91
+ ```
92
+
93
+ ## Available Tools
94
+
95
+ ### 1. `yandex_tracker_get_issue`
96
+
97
+ Get detailed information about a specific issue.
98
+
99
+ **Parameters:**
100
+ - `issue_key` (required): Issue key (e.g., "MYQUEUE-123")
101
+ - `response_format` (optional): "json" or "markdown" (default: "markdown")
102
+
103
+ **Example:**
104
+ ```
105
+ Get information about issue PROJ-456
106
+ ```
107
+
108
+ ### 2. `yandex_tracker_update_issue`
109
+
110
+ Update an existing issue.
111
+
112
+ **Parameters:**
113
+ - `issue_key` (required): Issue key
114
+ - `summary` (optional): New summary/title
115
+ - `description` (optional): New description
116
+ - `status` (optional): Status key (e.g., "open", "inProgress", "closed")
117
+ - `assignee` (optional): Assignee login
118
+ - `originalEstimation` (optional): Original estimate in ISO 8601 format (e.g., "PT8H", "P1D")
119
+ - `estimation` (optional): Remaining estimate in ISO 8601 format
120
+ - `spent` (optional): Time spent in ISO 8601 format
121
+ - `priority` (optional): Priority (e.g., "minor", "normal", "critical")
122
+ - `type` (optional): Issue type (e.g., "task", "bug")
123
+
124
+ **ISO 8601 Duration Examples:**
125
+ - `PT8H` - 8 hours
126
+ - `PT30M` - 30 minutes
127
+ - `P1D` - 1 day (8 business hours)
128
+ - `P1W` - 1 week (5 business days)
129
+ - `P2DT4H` - 2 days and 4 hours
130
+
131
+ **Example:**
132
+ ```
133
+ Set estimate for PROJ-456 to 16 hours
134
+ Update issue PROJ-456: set status to "inProgress" and assignee to "john.doe"
135
+ ```
136
+
137
+ ### 3. `yandex_tracker_add_worklog`
138
+
139
+ Add a time tracking record to an issue.
140
+
141
+ **Parameters:**
142
+ - `issue_key` (required): Issue key
143
+ - `duration` (required): Time spent in ISO 8601 format (e.g., "PT2H30M")
144
+ - `start` (optional): Start time in ISO 8601 format
145
+ - `comment` (optional): Description of work done
146
+
147
+ **Example:**
148
+ ```
149
+ Log 3 hours of work on PROJ-456 with comment "Implemented user authentication"
150
+ ```
151
+
152
+ **Note:** Yandex Tracker uses business weeks (5 days) and business days (8 hours). When you log time, the system converts it accordingly.
153
+
154
+ ### 4. `yandex_tracker_get_worklogs`
155
+
156
+ Get all time tracking records for an issue.
157
+
158
+ **Parameters:**
159
+ - `issue_key` (required): Issue key
160
+ - `response_format` (optional): "json" or "markdown" (default: "markdown")
161
+
162
+ **Example:**
163
+ ```
164
+ Show all time logs for PROJ-456
165
+ ```
166
+
167
+ ### 5. `yandex_tracker_search_issues`
168
+
169
+ Search for issues using query language or filters.
170
+
171
+ **Parameters:**
172
+ - `query` (optional): Query string (e.g., "Queue: MYQUEUE Assignee: me() Status: open")
173
+ - `filter` (optional): Filter as object (alternative to query)
174
+ - `order` (optional): Sort order array (e.g., ["updated", "-status"])
175
+ - `limit` (optional): Max results (default: 20, max: 100)
176
+ - `offset` (optional): Pagination offset (default: 0)
177
+ - `response_format` (optional): "json" or "markdown" (default: "markdown")
178
+
179
+ **Example:**
180
+ ```
181
+ Find all open issues assigned to me in queue PROJ
182
+ Search for bugs with high priority created this week
183
+ ```
184
+
185
+ ## Testing
186
+
187
+ Test the server using MCP Inspector:
188
+
189
+ ```bash
190
+ npm run inspector
191
+ ```
192
+
193
+ ## API Reference
194
+
195
+ This server uses Yandex Tracker API v2. For more details:
196
+ - [API Documentation](https://yandex.ru/support/tracker/ru/concepts/access)
197
+ - [Getting Issue](https://yandex.cloud/en/docs/tracker/concepts/issues/get-issue)
198
+ - [Updating Issue](https://yandex.cloud/en/docs/tracker/concepts/issues/patch-issue)
199
+ - [Adding Worklog](https://yandex.cloud/en/docs/tracker/concepts/issues/new-worklog)
200
+
201
+ ## Architecture
202
+
203
+ ```
204
+ src/
205
+ ├── index.ts # Main server implementation with tool handlers
206
+ ├── client.ts # Yandex Tracker API client
207
+ └── schemas.ts # Zod validation schemas
208
+ ```
209
+
210
+ ## Development
211
+
212
+ ```bash
213
+ # Install dependencies
214
+ npm install
215
+
216
+ # Build TypeScript
217
+ npm run build
218
+
219
+ # Watch mode for development
220
+ npm run dev
221
+
222
+ # Start server
223
+ npm start
224
+ ```
225
+
226
+ ## Error Handling
227
+
228
+ The server provides helpful error messages:
229
+ - **Authentication errors**: Check your token and org ID
230
+ - **404 Not Found**: Issue key doesn't exist
231
+ - **400 Bad Request**: Invalid parameters or format
232
+ - **403 Forbidden**: Insufficient permissions
233
+
234
+ ## Security
235
+
236
+ - Never commit your OAuth token or IAM token
237
+ - Use environment variables for credentials
238
+ - Tokens are sent via HTTPS to Yandex Tracker API
239
+ - Consider using IAM tokens for temporary access
240
+
241
+ ## License
242
+
243
+ MIT
244
+
245
+ ## Sources
246
+
247
+ This implementation is based on:
248
+ - [Yandex Tracker API Documentation](https://yandex.cloud/en/docs/tracker/user/API)
249
+ - [Python Tracker Client](https://github.com/yandex/yandex_tracker_client)
250
+ - [MCP Specification](https://modelcontextprotocol.io/)
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Yandex Tracker API Client
3
+ *
4
+ * Provides methods to interact with Yandex Tracker API v2
5
+ * API Documentation: https://yandex.ru/support/tracker/ru/concepts/access
6
+ */
7
+ interface YandexTrackerConfig {
8
+ token?: string;
9
+ iamToken?: string;
10
+ orgId?: string;
11
+ cloudOrgId?: string;
12
+ }
13
+ export declare class YandexTrackerClient {
14
+ private readonly authHeader;
15
+ private readonly orgIdHeader;
16
+ constructor(config: YandexTrackerConfig);
17
+ /**
18
+ * Make an authenticated request to Yandex Tracker API
19
+ */
20
+ private request;
21
+ /**
22
+ * Get issue by key
23
+ * GET /v2/issues/{issueKey}
24
+ */
25
+ getIssue(issueKey: string): Promise<any>;
26
+ /**
27
+ * Update issue
28
+ * PATCH /v2/issues/{issueKey}
29
+ */
30
+ updateIssue(issueKey: string, updates: Record<string, any>): Promise<any>;
31
+ /**
32
+ * Add worklog (time spent) to issue
33
+ * POST /v2/issues/{issueKey}/worklog
34
+ */
35
+ addWorklog(issueKey: string, worklog: {
36
+ duration: string;
37
+ start?: string;
38
+ comment?: string;
39
+ }): Promise<any>;
40
+ /**
41
+ * Get worklogs for issue
42
+ * GET /v2/issues/{issueKey}/worklog
43
+ */
44
+ getWorklogs(issueKey: string): Promise<any[]>;
45
+ /**
46
+ * Search issues
47
+ * POST /v2/issues/_search
48
+ */
49
+ searchIssues(params: {
50
+ query?: string;
51
+ filter?: Record<string, any>;
52
+ order?: string[];
53
+ limit?: number;
54
+ offset?: number;
55
+ }): Promise<{
56
+ issues: any[];
57
+ total: number;
58
+ count: number;
59
+ offset: number;
60
+ }>;
61
+ }
62
+ export {};
63
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,UAAU,mBAAmB;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,MAAM,EAAE,mBAAmB;IAoBvC;;OAEG;YACW,OAAO;IAwCrB;;;OAGG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAI9C;;;OAGG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IA2B/E;;;OAGG;IACG,UAAU,CACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GACA,OAAO,CAAC,GAAG,CAAC;IAmBf;;;OAGG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAInD;;;OAGG;IACG,YAAY,CAAC,MAAM,EAAE;QACzB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC7B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC;QACV,MAAM,EAAE,GAAG,EAAE,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CAoCH"}
package/dist/client.js ADDED
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Yandex Tracker API Client
3
+ *
4
+ * Provides methods to interact with Yandex Tracker API v2
5
+ * API Documentation: https://yandex.ru/support/tracker/ru/concepts/access
6
+ */
7
+ const API_BASE_URL = "https://api.tracker.yandex.net/v2";
8
+ export class YandexTrackerClient {
9
+ authHeader;
10
+ orgIdHeader;
11
+ constructor(config) {
12
+ // Determine authentication method
13
+ if (config.iamToken) {
14
+ this.authHeader = `Bearer ${config.iamToken}`;
15
+ }
16
+ else if (config.token) {
17
+ this.authHeader = `OAuth ${config.token}`;
18
+ }
19
+ else {
20
+ throw new Error("Either token or iamToken must be provided");
21
+ }
22
+ // Determine organization ID
23
+ if (config.cloudOrgId) {
24
+ this.orgIdHeader = config.cloudOrgId;
25
+ }
26
+ else if (config.orgId) {
27
+ this.orgIdHeader = config.orgId;
28
+ }
29
+ else {
30
+ throw new Error("Either orgId or cloudOrgId must be provided");
31
+ }
32
+ }
33
+ /**
34
+ * Make an authenticated request to Yandex Tracker API
35
+ */
36
+ async request(endpoint, options = {}) {
37
+ const url = `${API_BASE_URL}${endpoint}`;
38
+ const headers = {
39
+ Authorization: this.authHeader,
40
+ "X-Org-ID": this.orgIdHeader,
41
+ "Content-Type": "application/json",
42
+ ...options.headers,
43
+ };
44
+ const response = await fetch(url, {
45
+ ...options,
46
+ headers,
47
+ });
48
+ if (!response.ok) {
49
+ let errorMessage = `API request failed: ${response.status} ${response.statusText}`;
50
+ try {
51
+ const errorData = await response.json();
52
+ if (errorData.errorMessages) {
53
+ errorMessage += `\nDetails: ${errorData.errorMessages.join(", ")}`;
54
+ }
55
+ else if (errorData.errors) {
56
+ errorMessage += `\nErrors: ${JSON.stringify(errorData.errors)}`;
57
+ }
58
+ }
59
+ catch {
60
+ // If parsing error response fails, use default message
61
+ }
62
+ throw new Error(errorMessage);
63
+ }
64
+ // Handle empty responses (e.g., 204 No Content)
65
+ if (response.status === 204) {
66
+ return null;
67
+ }
68
+ return response.json();
69
+ }
70
+ /**
71
+ * Get issue by key
72
+ * GET /v2/issues/{issueKey}
73
+ */
74
+ async getIssue(issueKey) {
75
+ return this.request(`/issues/${issueKey}`);
76
+ }
77
+ /**
78
+ * Update issue
79
+ * PATCH /v2/issues/{issueKey}
80
+ */
81
+ async updateIssue(issueKey, updates) {
82
+ // Transform simple values to Yandex Tracker format
83
+ const body = {};
84
+ for (const [key, value] of Object.entries(updates)) {
85
+ if (value === undefined)
86
+ continue;
87
+ // Fields that need object format
88
+ if (["status", "type", "priority"].includes(key)) {
89
+ body[key] = { key: value };
90
+ }
91
+ // Assignee can be string (login) or object
92
+ else if (key === "assignee") {
93
+ body[key] = typeof value === "string" ? value : value;
94
+ }
95
+ // Direct fields
96
+ else {
97
+ body[key] = value;
98
+ }
99
+ }
100
+ return this.request(`/issues/${issueKey}`, {
101
+ method: "PATCH",
102
+ body: JSON.stringify(body),
103
+ });
104
+ }
105
+ /**
106
+ * Add worklog (time spent) to issue
107
+ * POST /v2/issues/{issueKey}/worklog
108
+ */
109
+ async addWorklog(issueKey, worklog) {
110
+ const body = {
111
+ duration: worklog.duration,
112
+ };
113
+ if (worklog.start) {
114
+ body.start = worklog.start;
115
+ }
116
+ if (worklog.comment) {
117
+ body.comment = worklog.comment;
118
+ }
119
+ return this.request(`/issues/${issueKey}/worklog`, {
120
+ method: "POST",
121
+ body: JSON.stringify(body),
122
+ });
123
+ }
124
+ /**
125
+ * Get worklogs for issue
126
+ * GET /v2/issues/{issueKey}/worklog
127
+ */
128
+ async getWorklogs(issueKey) {
129
+ return this.request(`/issues/${issueKey}/worklog`);
130
+ }
131
+ /**
132
+ * Search issues
133
+ * POST /v2/issues/_search
134
+ */
135
+ async searchIssues(params) {
136
+ const body = {};
137
+ if (params.query) {
138
+ body.query = params.query;
139
+ }
140
+ if (params.filter) {
141
+ body.filter = params.filter;
142
+ }
143
+ if (params.order) {
144
+ body.order = params.order;
145
+ }
146
+ // Add pagination parameters as query params
147
+ const queryParams = new URLSearchParams();
148
+ const perPage = params.limit || 20;
149
+ const page = Math.floor((params.offset || 0) / perPage) + 1;
150
+ queryParams.append("perPage", perPage.toString());
151
+ queryParams.append("page", page.toString());
152
+ const endpoint = `/issues/_search?${queryParams.toString()}`;
153
+ const issues = await this.request(endpoint, {
154
+ method: "POST",
155
+ body: JSON.stringify(body),
156
+ });
157
+ return {
158
+ issues: Array.isArray(issues) ? issues : [],
159
+ total: issues.length, // Note: Yandex Tracker doesn't return total count in all cases
160
+ count: issues.length,
161
+ offset: params.offset || 0,
162
+ };
163
+ }
164
+ }
165
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,422 @@
1
+ #!/usr/bin/env node
2
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
5
+ import { YandexTrackerClient } from "./client.js";
6
+ import { GetIssueArgsSchema, UpdateIssueArgsSchema, AddWorklogArgsSchema, GetWorklogsArgsSchema, SearchIssuesArgsSchema, } from "./schemas.js";
7
+ // Environment variables
8
+ const API_TOKEN = process.env.YANDEX_TRACKER_TOKEN;
9
+ const ORG_ID = process.env.YANDEX_TRACKER_ORG_ID;
10
+ const IAM_TOKEN = process.env.YANDEX_TRACKER_IAM_TOKEN;
11
+ const CLOUD_ORG_ID = process.env.YANDEX_TRACKER_CLOUD_ORG_ID;
12
+ if (!API_TOKEN && !IAM_TOKEN) {
13
+ console.error("Error: YANDEX_TRACKER_TOKEN or YANDEX_TRACKER_IAM_TOKEN must be set", { stdio: "inherit" });
14
+ process.exit(1);
15
+ }
16
+ if (!ORG_ID && !CLOUD_ORG_ID) {
17
+ console.error("Error: YANDEX_TRACKER_ORG_ID or YANDEX_TRACKER_CLOUD_ORG_ID must be set", { stdio: "inherit" });
18
+ process.exit(1);
19
+ }
20
+ // Initialize Yandex Tracker client
21
+ const client = new YandexTrackerClient({
22
+ token: API_TOKEN,
23
+ iamToken: IAM_TOKEN,
24
+ orgId: ORG_ID,
25
+ cloudOrgId: CLOUD_ORG_ID,
26
+ });
27
+ // Initialize MCP server
28
+ const server = new Server({
29
+ name: "yandex-tracker-mcp-server",
30
+ version: "1.0.0",
31
+ }, {
32
+ capabilities: {
33
+ tools: {},
34
+ },
35
+ });
36
+ // Define available tools
37
+ const tools = [
38
+ {
39
+ name: "yandex_tracker_get_issue",
40
+ description: "Get detailed information about a specific issue by its key (e.g., MYQUEUE-123). Returns issue data including status, assignee, description, estimates, and more.",
41
+ inputSchema: {
42
+ type: "object",
43
+ properties: {
44
+ issue_key: {
45
+ type: "string",
46
+ description: "Issue key (e.g., MYQUEUE-123)",
47
+ },
48
+ response_format: {
49
+ type: "string",
50
+ enum: ["json", "markdown"],
51
+ description: "Response format: 'json' for structured data or 'markdown' for human-readable format",
52
+ default: "markdown",
53
+ },
54
+ },
55
+ required: ["issue_key"],
56
+ },
57
+ annotations: {
58
+ readOnlyHint: true,
59
+ destructiveHint: false,
60
+ idempotentHint: true,
61
+ openWorldHint: true,
62
+ },
63
+ },
64
+ {
65
+ name: "yandex_tracker_update_issue",
66
+ description: "Update an existing issue. Can modify fields like summary, description, status, assignee, estimates (originalEstimation, estimation), spent time, priority, and more. Use ISO 8601 duration format for time fields (e.g., 'PT8H' for 8 hours, 'P1D' for 1 day, 'P1W' for 1 week).",
67
+ inputSchema: {
68
+ type: "object",
69
+ properties: {
70
+ issue_key: {
71
+ type: "string",
72
+ description: "Issue key (e.g., MYQUEUE-123)",
73
+ },
74
+ summary: {
75
+ type: "string",
76
+ description: "Issue summary/title",
77
+ },
78
+ description: {
79
+ type: "string",
80
+ description: "Issue description",
81
+ },
82
+ status: {
83
+ type: "string",
84
+ description: "Status key or name (e.g., 'open', 'inProgress', 'closed')",
85
+ },
86
+ assignee: {
87
+ type: "string",
88
+ description: "Assignee login or ID",
89
+ },
90
+ originalEstimation: {
91
+ type: "string",
92
+ description: "Original time estimate in ISO 8601 duration format (e.g., 'PT8H', 'P1D', 'P1W')",
93
+ },
94
+ estimation: {
95
+ type: "string",
96
+ description: "Remaining time estimate in ISO 8601 duration format (e.g., 'PT4H', 'P2D')",
97
+ },
98
+ spent: {
99
+ type: "string",
100
+ description: "Time spent in ISO 8601 duration format (e.g., 'PT2H')",
101
+ },
102
+ priority: {
103
+ type: "string",
104
+ description: "Priority key or name (e.g., 'minor', 'normal', 'critical')",
105
+ },
106
+ type: {
107
+ type: "string",
108
+ description: "Issue type key or name (e.g., 'task', 'bug', 'improvement')",
109
+ },
110
+ },
111
+ required: ["issue_key"],
112
+ },
113
+ annotations: {
114
+ readOnlyHint: false,
115
+ destructiveHint: false,
116
+ idempotentHint: false,
117
+ openWorldHint: true,
118
+ },
119
+ },
120
+ {
121
+ name: "yandex_tracker_add_worklog",
122
+ description: "Add a time tracking record (worklog) to an issue. Records how much time was spent working on the issue. Duration is in ISO 8601 format (e.g., 'PT2H30M' for 2 hours 30 minutes, 'PT8H' for 8 hours). Note: Yandex Tracker uses business weeks (5 days) and business days (8 hours).",
123
+ inputSchema: {
124
+ type: "object",
125
+ properties: {
126
+ issue_key: {
127
+ type: "string",
128
+ description: "Issue key (e.g., MYQUEUE-123)",
129
+ },
130
+ duration: {
131
+ type: "string",
132
+ description: "Time spent in ISO 8601 duration format (e.g., 'PT2H', 'PT30M', 'P1D')",
133
+ },
134
+ start: {
135
+ type: "string",
136
+ description: "Start date and time in ISO 8601 format (e.g., '2024-01-15T10:00:00+03:00'). If not specified, current time is used.",
137
+ },
138
+ comment: {
139
+ type: "string",
140
+ description: "Optional comment describing the work done",
141
+ },
142
+ },
143
+ required: ["issue_key", "duration"],
144
+ },
145
+ annotations: {
146
+ readOnlyHint: false,
147
+ destructiveHint: false,
148
+ idempotentHint: false,
149
+ openWorldHint: true,
150
+ },
151
+ },
152
+ {
153
+ name: "yandex_tracker_get_worklogs",
154
+ description: "Get all time tracking records (worklogs) for a specific issue. Returns a list of all logged time entries with duration, start time, author, and comments.",
155
+ inputSchema: {
156
+ type: "object",
157
+ properties: {
158
+ issue_key: {
159
+ type: "string",
160
+ description: "Issue key (e.g., MYQUEUE-123)",
161
+ },
162
+ response_format: {
163
+ type: "string",
164
+ enum: ["json", "markdown"],
165
+ description: "Response format: 'json' for structured data or 'markdown' for human-readable format",
166
+ default: "markdown",
167
+ },
168
+ },
169
+ required: ["issue_key"],
170
+ },
171
+ annotations: {
172
+ readOnlyHint: true,
173
+ destructiveHint: false,
174
+ idempotentHint: true,
175
+ openWorldHint: true,
176
+ },
177
+ },
178
+ {
179
+ name: "yandex_tracker_search_issues",
180
+ description: "Search for issues using Yandex Tracker query language. Supports filters like queue, assignee, status, etc. Returns a list of matching issues with pagination support.",
181
+ inputSchema: {
182
+ type: "object",
183
+ properties: {
184
+ query: {
185
+ type: "string",
186
+ description: "Search query in Yandex Tracker query language (e.g., 'Queue: MYQUEUE Assignee: me() Status: open')",
187
+ },
188
+ filter: {
189
+ type: "object",
190
+ description: "Alternative to query: filter as object (e.g., {queue: 'MYQUEUE', assignee: 'user123'})",
191
+ },
192
+ order: {
193
+ type: "array",
194
+ items: { type: "string" },
195
+ description: "Sort order (e.g., ['updated', '-status', '+priority']). Prefix with '-' for descending, '+' for ascending",
196
+ },
197
+ limit: {
198
+ type: "number",
199
+ description: "Maximum number of results to return (default: 20, max: 100)",
200
+ default: 20,
201
+ },
202
+ offset: {
203
+ type: "number",
204
+ description: "Offset for pagination (default: 0)",
205
+ default: 0,
206
+ },
207
+ response_format: {
208
+ type: "string",
209
+ enum: ["json", "markdown"],
210
+ description: "Response format: 'json' for structured data or 'markdown' for human-readable format",
211
+ default: "markdown",
212
+ },
213
+ },
214
+ },
215
+ annotations: {
216
+ readOnlyHint: true,
217
+ destructiveHint: false,
218
+ idempotentHint: true,
219
+ openWorldHint: true,
220
+ },
221
+ },
222
+ ];
223
+ // List available tools
224
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
225
+ return { tools };
226
+ });
227
+ // Handle tool calls
228
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
229
+ try {
230
+ const { name, arguments: args } = request.params;
231
+ switch (name) {
232
+ case "yandex_tracker_get_issue": {
233
+ const parsed = GetIssueArgsSchema.parse(args);
234
+ const issue = await client.getIssue(parsed.issue_key);
235
+ const format = parsed.response_format || "markdown";
236
+ if (format === "json") {
237
+ return {
238
+ content: [
239
+ {
240
+ type: "text",
241
+ text: JSON.stringify(issue, null, 2),
242
+ },
243
+ ],
244
+ };
245
+ }
246
+ else {
247
+ const markdown = formatIssueAsMarkdown(issue);
248
+ return {
249
+ content: [
250
+ {
251
+ type: "text",
252
+ text: markdown,
253
+ },
254
+ ],
255
+ };
256
+ }
257
+ }
258
+ case "yandex_tracker_update_issue": {
259
+ const parsed = UpdateIssueArgsSchema.parse(args);
260
+ const { issue_key, ...updates } = parsed;
261
+ const updatedIssue = await client.updateIssue(issue_key, updates);
262
+ return {
263
+ content: [
264
+ {
265
+ type: "text",
266
+ text: `✓ Issue ${issue_key} updated successfully\n\n${formatIssueAsMarkdown(updatedIssue)}`,
267
+ },
268
+ ],
269
+ };
270
+ }
271
+ case "yandex_tracker_add_worklog": {
272
+ const parsed = AddWorklogArgsSchema.parse(args);
273
+ const { issue_key, ...worklogData } = parsed;
274
+ const worklog = await client.addWorklog(issue_key, worklogData);
275
+ return {
276
+ content: [
277
+ {
278
+ type: "text",
279
+ text: `✓ Worklog added to ${issue_key}\n\nDuration: ${worklog.duration}\nStart: ${worklog.start}${worklog.comment ? `\nComment: ${worklog.comment}` : ""}`,
280
+ },
281
+ ],
282
+ };
283
+ }
284
+ case "yandex_tracker_get_worklogs": {
285
+ const parsed = GetWorklogsArgsSchema.parse(args);
286
+ const worklogs = await client.getWorklogs(parsed.issue_key);
287
+ const format = parsed.response_format || "markdown";
288
+ if (format === "json") {
289
+ return {
290
+ content: [
291
+ {
292
+ type: "text",
293
+ text: JSON.stringify(worklogs, null, 2),
294
+ },
295
+ ],
296
+ };
297
+ }
298
+ else {
299
+ const markdown = formatWorklogsAsMarkdown(worklogs);
300
+ return {
301
+ content: [
302
+ {
303
+ type: "text",
304
+ text: markdown,
305
+ },
306
+ ],
307
+ };
308
+ }
309
+ }
310
+ case "yandex_tracker_search_issues": {
311
+ const parsed = SearchIssuesArgsSchema.parse(args);
312
+ const result = await client.searchIssues(parsed);
313
+ const format = parsed.response_format || "markdown";
314
+ if (format === "json") {
315
+ return {
316
+ content: [
317
+ {
318
+ type: "text",
319
+ text: JSON.stringify(result, null, 2),
320
+ },
321
+ ],
322
+ };
323
+ }
324
+ else {
325
+ const markdown = formatSearchResultsAsMarkdown(result);
326
+ return {
327
+ content: [
328
+ {
329
+ type: "text",
330
+ text: markdown,
331
+ },
332
+ ],
333
+ };
334
+ }
335
+ }
336
+ default:
337
+ throw new Error(`Unknown tool: ${name}`);
338
+ }
339
+ }
340
+ catch (error) {
341
+ const errorMessage = error instanceof Error ? error.message : String(error);
342
+ return {
343
+ content: [
344
+ {
345
+ type: "text",
346
+ text: `Error: ${errorMessage}`,
347
+ },
348
+ ],
349
+ isError: true,
350
+ };
351
+ }
352
+ });
353
+ // Formatting helpers
354
+ function formatIssueAsMarkdown(issue) {
355
+ let md = `# ${issue.key}: ${issue.summary}\n\n`;
356
+ md += `**Status:** ${issue.status?.display || issue.status?.key || "N/A"}\n`;
357
+ md += `**Type:** ${issue.type?.display || issue.type?.key || "N/A"}\n`;
358
+ md += `**Priority:** ${issue.priority?.display || issue.priority?.key || "N/A"}\n`;
359
+ md += `**Assignee:** ${issue.assignee?.display || "Unassigned"}\n`;
360
+ md += `**Created:** ${issue.createdAt || "N/A"}\n`;
361
+ md += `**Updated:** ${issue.updatedAt || "N/A"}\n\n`;
362
+ if (issue.originalEstimation) {
363
+ md += `**Original Estimate:** ${issue.originalEstimation}\n`;
364
+ }
365
+ if (issue.estimation) {
366
+ md += `**Remaining Estimate:** ${issue.estimation}\n`;
367
+ }
368
+ if (issue.spent) {
369
+ md += `**Time Spent:** ${issue.spent}\n`;
370
+ }
371
+ if (issue.description) {
372
+ md += `\n## Description\n\n${issue.description}\n`;
373
+ }
374
+ return md;
375
+ }
376
+ function formatWorklogsAsMarkdown(worklogs) {
377
+ if (!worklogs || worklogs.length === 0) {
378
+ return "No worklog entries found.";
379
+ }
380
+ let md = `# Worklog Entries (${worklogs.length})\n\n`;
381
+ for (const log of worklogs) {
382
+ md += `## ${log.createdBy?.display || "Unknown"}\n`;
383
+ md += `**Duration:** ${log.duration}\n`;
384
+ md += `**Start:** ${log.start}\n`;
385
+ md += `**Created:** ${log.createdAt}\n`;
386
+ if (log.comment) {
387
+ md += `**Comment:** ${log.comment}\n`;
388
+ }
389
+ md += `\n`;
390
+ }
391
+ return md;
392
+ }
393
+ function formatSearchResultsAsMarkdown(result) {
394
+ const { issues, total, count, offset } = result;
395
+ if (!issues || issues.length === 0) {
396
+ return "No issues found.";
397
+ }
398
+ let md = `# Search Results\n\n`;
399
+ md += `Found ${total} issues (showing ${count} from offset ${offset})\n\n`;
400
+ for (const issue of issues) {
401
+ md += `## ${issue.key}: ${issue.summary}\n`;
402
+ md += `**Status:** ${issue.status?.display || "N/A"} | `;
403
+ md += `**Priority:** ${issue.priority?.display || "N/A"} | `;
404
+ md += `**Assignee:** ${issue.assignee?.display || "Unassigned"}\n`;
405
+ md += `**Updated:** ${issue.updatedAt}\n\n`;
406
+ }
407
+ if (offset + count < total) {
408
+ md += `\n---\n*Use offset=${offset + count} to see more results*\n`;
409
+ }
410
+ return md;
411
+ }
412
+ // Start server
413
+ async function main() {
414
+ const transport = new StdioServerTransport();
415
+ await server.connect(transport);
416
+ console.error("Yandex Tracker MCP Server running on stdio");
417
+ }
418
+ main().catch((error) => {
419
+ console.error("Server error:", error);
420
+ process.exit(1);
421
+ });
422
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ import { z } from "zod";
2
+ export declare const GetIssueArgsSchema: z.ZodObject<{
3
+ issue_key: z.ZodString;
4
+ response_format: z.ZodDefault<z.ZodOptional<z.ZodEnum<["json", "markdown"]>>>;
5
+ }, "strip", z.ZodTypeAny, {
6
+ issue_key: string;
7
+ response_format: "json" | "markdown";
8
+ }, {
9
+ issue_key: string;
10
+ response_format?: "json" | "markdown" | undefined;
11
+ }>;
12
+ export type GetIssueArgs = z.infer<typeof GetIssueArgsSchema>;
13
+ export declare const UpdateIssueArgsSchema: z.ZodObject<{
14
+ issue_key: z.ZodString;
15
+ summary: z.ZodOptional<z.ZodString>;
16
+ description: z.ZodOptional<z.ZodString>;
17
+ status: z.ZodOptional<z.ZodString>;
18
+ assignee: z.ZodOptional<z.ZodString>;
19
+ originalEstimation: z.ZodOptional<z.ZodString>;
20
+ estimation: z.ZodOptional<z.ZodString>;
21
+ spent: z.ZodOptional<z.ZodString>;
22
+ priority: z.ZodOptional<z.ZodString>;
23
+ type: z.ZodOptional<z.ZodString>;
24
+ }, "strip", z.ZodTypeAny, {
25
+ issue_key: string;
26
+ status?: string | undefined;
27
+ type?: string | undefined;
28
+ priority?: string | undefined;
29
+ assignee?: string | undefined;
30
+ summary?: string | undefined;
31
+ description?: string | undefined;
32
+ originalEstimation?: string | undefined;
33
+ estimation?: string | undefined;
34
+ spent?: string | undefined;
35
+ }, {
36
+ issue_key: string;
37
+ status?: string | undefined;
38
+ type?: string | undefined;
39
+ priority?: string | undefined;
40
+ assignee?: string | undefined;
41
+ summary?: string | undefined;
42
+ description?: string | undefined;
43
+ originalEstimation?: string | undefined;
44
+ estimation?: string | undefined;
45
+ spent?: string | undefined;
46
+ }>;
47
+ export type UpdateIssueArgs = z.infer<typeof UpdateIssueArgsSchema>;
48
+ export declare const AddWorklogArgsSchema: z.ZodObject<{
49
+ issue_key: z.ZodString;
50
+ duration: z.ZodString;
51
+ start: z.ZodOptional<z.ZodString>;
52
+ comment: z.ZodOptional<z.ZodString>;
53
+ }, "strip", z.ZodTypeAny, {
54
+ duration: string;
55
+ issue_key: string;
56
+ start?: string | undefined;
57
+ comment?: string | undefined;
58
+ }, {
59
+ duration: string;
60
+ issue_key: string;
61
+ start?: string | undefined;
62
+ comment?: string | undefined;
63
+ }>;
64
+ export type AddWorklogArgs = z.infer<typeof AddWorklogArgsSchema>;
65
+ export declare const GetWorklogsArgsSchema: z.ZodObject<{
66
+ issue_key: z.ZodString;
67
+ response_format: z.ZodDefault<z.ZodOptional<z.ZodEnum<["json", "markdown"]>>>;
68
+ }, "strip", z.ZodTypeAny, {
69
+ issue_key: string;
70
+ response_format: "json" | "markdown";
71
+ }, {
72
+ issue_key: string;
73
+ response_format?: "json" | "markdown" | undefined;
74
+ }>;
75
+ export type GetWorklogsArgs = z.infer<typeof GetWorklogsArgsSchema>;
76
+ export declare const SearchIssuesArgsSchema: z.ZodObject<{
77
+ query: z.ZodOptional<z.ZodString>;
78
+ filter: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
79
+ order: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
80
+ limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
81
+ offset: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
82
+ response_format: z.ZodDefault<z.ZodOptional<z.ZodEnum<["json", "markdown"]>>>;
83
+ }, "strip", z.ZodTypeAny, {
84
+ offset: number;
85
+ response_format: "json" | "markdown";
86
+ limit: number;
87
+ filter?: Record<string, any> | undefined;
88
+ query?: string | undefined;
89
+ order?: string[] | undefined;
90
+ }, {
91
+ filter?: Record<string, any> | undefined;
92
+ query?: string | undefined;
93
+ order?: string[] | undefined;
94
+ offset?: number | undefined;
95
+ response_format?: "json" | "markdown" | undefined;
96
+ limit?: number | undefined;
97
+ }>;
98
+ export type SearchIssuesArgs = z.infer<typeof SearchIssuesArgsSchema>;
99
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,kBAAkB;;;;;;;;;EAO7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAG9D,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoBhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAGpE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;EAU/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAGlE,eAAO,MAAM,qBAAqB;;;;;;;;;EAOhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAGpE,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;EA4BjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -0,0 +1,84 @@
1
+ import { z } from "zod";
2
+ // Get issue schema
3
+ export const GetIssueArgsSchema = z.object({
4
+ issue_key: z.string().describe("Issue key (e.g., MYQUEUE-123)"),
5
+ response_format: z
6
+ .enum(["json", "markdown"])
7
+ .optional()
8
+ .default("markdown")
9
+ .describe("Response format"),
10
+ });
11
+ // Update issue schema
12
+ export const UpdateIssueArgsSchema = z.object({
13
+ issue_key: z.string().describe("Issue key (e.g., MYQUEUE-123)"),
14
+ summary: z.string().optional().describe("Issue summary/title"),
15
+ description: z.string().optional().describe("Issue description"),
16
+ status: z.string().optional().describe("Status key or name"),
17
+ assignee: z.string().optional().describe("Assignee login or ID"),
18
+ originalEstimation: z
19
+ .string()
20
+ .optional()
21
+ .describe("Original time estimate in ISO 8601 duration format"),
22
+ estimation: z
23
+ .string()
24
+ .optional()
25
+ .describe("Remaining time estimate in ISO 8601 duration format"),
26
+ spent: z
27
+ .string()
28
+ .optional()
29
+ .describe("Time spent in ISO 8601 duration format"),
30
+ priority: z.string().optional().describe("Priority key or name"),
31
+ type: z.string().optional().describe("Issue type key or name"),
32
+ });
33
+ // Add worklog schema
34
+ export const AddWorklogArgsSchema = z.object({
35
+ issue_key: z.string().describe("Issue key (e.g., MYQUEUE-123)"),
36
+ duration: z
37
+ .string()
38
+ .describe("Time spent in ISO 8601 duration format (e.g., 'PT2H', 'P1D')"),
39
+ start: z
40
+ .string()
41
+ .optional()
42
+ .describe("Start date and time in ISO 8601 format"),
43
+ comment: z.string().optional().describe("Optional comment"),
44
+ });
45
+ // Get worklogs schema
46
+ export const GetWorklogsArgsSchema = z.object({
47
+ issue_key: z.string().describe("Issue key (e.g., MYQUEUE-123)"),
48
+ response_format: z
49
+ .enum(["json", "markdown"])
50
+ .optional()
51
+ .default("markdown")
52
+ .describe("Response format"),
53
+ });
54
+ // Search issues schema
55
+ export const SearchIssuesArgsSchema = z.object({
56
+ query: z
57
+ .string()
58
+ .optional()
59
+ .describe("Search query in Yandex Tracker query language"),
60
+ filter: z
61
+ .record(z.any())
62
+ .optional()
63
+ .describe("Filter as object"),
64
+ order: z
65
+ .array(z.string())
66
+ .optional()
67
+ .describe("Sort order"),
68
+ limit: z
69
+ .number()
70
+ .optional()
71
+ .default(20)
72
+ .describe("Maximum number of results"),
73
+ offset: z
74
+ .number()
75
+ .optional()
76
+ .default(0)
77
+ .describe("Offset for pagination"),
78
+ response_format: z
79
+ .enum(["json", "markdown"])
80
+ .optional()
81
+ .default("markdown")
82
+ .describe("Response format"),
83
+ });
84
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@gor-dev/yandex-tracker-mcp",
3
+ "version": "1.0.0",
4
+ "description": "MCP server for Yandex Tracker API integration",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "yandex-tracker-mcp": "dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "README.md",
13
+ "LICENSE"
14
+ ],
15
+ "scripts": {
16
+ "build": "tsc",
17
+ "dev": "tsc --watch",
18
+ "start": "node dist/index.js",
19
+ "inspector": "npx @modelcontextprotocol/inspector dist/index.js",
20
+ "prepublishOnly": "npm run build"
21
+ },
22
+ "keywords": [
23
+ "mcp",
24
+ "yandex-tracker",
25
+ "model-context-protocol",
26
+ "yandex",
27
+ "tracker",
28
+ "issue-tracking",
29
+ "project-management",
30
+ "claude",
31
+ "ai"
32
+ ],
33
+ "author": "Sergey Gorban",
34
+ "license": "MIT",
35
+ "repository": {
36
+ "type": "git",
37
+ "url": "git+https://github.com/gorban-dev/yandex-tracker-mcp-server.git"
38
+ },
39
+ "bugs": {
40
+ "url": "https://github.com/gorban-dev/yandex-tracker-mcp-server/issues"
41
+ },
42
+ "homepage": "https://github.com/gorban-dev/yandex-tracker-mcp-server#readme",
43
+ "engines": {
44
+ "node": ">=18.0.0"
45
+ },
46
+ "dependencies": {
47
+ "@modelcontextprotocol/sdk": "^1.0.4",
48
+ "zod": "^3.24.1"
49
+ },
50
+ "devDependencies": {
51
+ "@types/node": "^22.10.5",
52
+ "typescript": "^5.7.3"
53
+ }
54
+ }