{"_id":"@duongkhuong/mcp-redmine","_rev":"6-938707e5f91314ad1107cd02c2af6e34","name":"@duongkhuong/mcp-redmine","dist-tags":{"latest":"1.1.3"},"versions":{"1.0.0":{"name":"@duongkhuong/mcp-redmine","version":"1.0.0","keywords":["mcp","redmine","ai","agent","model-context-protocol","mcp-server","redmine-api","llm","claude","project-management"],"author":{"name":"khuongdv"},"license":"MIT","_id":"@duongkhuong/mcp-redmine@1.0.0","maintainers":[{"name":"duongkhuong","email":"duongkhuongit@gmail.com"}],"homepage":"https://github.com/vfa-khuongdv/mcp_readmine#readme","bugs":{"url":"https://github.com/vfa-khuongdv/mcp_readmine/issues"},"bin":{"mcp-redmine":"dist/index.js"},"dist":{"shasum":"88775067cbdbd9fbbb49ea0dbec66a1097573512","tarball":"https://registry.npmjs.org/@duongkhuong/mcp-redmine/-/mcp-redmine-1.0.0.tgz","fileCount":21,"integrity":"sha512-4I1P+bk2VlYpBw/NYC+iFe9ofFUtNqRkin4Oar9nLP2NYF0+w2sF08baWlKjjOqQFDR8SMZx4yIkadCARKckBQ==","signatures":[{"sig":"MEUCIQDv951bdNM/006A/+XAAnavo+SVYHoP6W29RW+1JmM7hAIgNkx8pLybOqtDunbKXjQXqz95N+xZOrg+x3/jbYVkvrM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59536},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"1e9829955d6d6a281c74f15bd828dfdfdbce1d51","mcpName":"io.github.khuongdv/redmine","scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js","prepare":"npm run build"},"_npmUser":{"name":"duongkhuong","email":"duongkhuongit@gmail.com"},"repository":{"url":"git+https://github.com/vfa-khuongdv/mcp_readmine.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for Redmine API integration with AI agents","directories":{},"_nodeVersion":"18.20.8","dependencies":{"zod":"^3.24.1","axios":"^1.7.9","dotenv":"^16.4.7","@modelcontextprotocol/sdk":"^1.0.4"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.2","@types/node":"^22.10.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-redmine_1.0.0_1764949777112_0.025222173739610332","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@duongkhuong/mcp-redmine","version":"1.0.1","keywords":["mcp","redmine","ai","agent","model-context-protocol","mcp-server","redmine-api","llm","claude","project-management"],"author":{"name":"khuongdv"},"license":"MIT","_id":"@duongkhuong/mcp-redmine@1.0.1","maintainers":[{"name":"duongkhuong","email":"duongkhuongit@gmail.com"}],"homepage":"https://github.com/vfa-khuongdv/mcp_readmine#readme","bugs":{"url":"https://github.com/vfa-khuongdv/mcp_readmine/issues"},"bin":{"mcp-redmine":"dist/index.js"},"dist":{"shasum":"ad970fd99a0f0f7363e16b2a81f9abecca02c914","tarball":"https://registry.npmjs.org/@duongkhuong/mcp-redmine/-/mcp-redmine-1.0.1.tgz","fileCount":23,"integrity":"sha512-rVxuPTvqXEjSERzbI7fhXrwQUDSKZ1AmXHBcSiemc9kfIHt2iOtom2Oc/EEUfbjKBFPIR0v6hwR5nBXh8d+3iw==","signatures":[{"sig":"MEYCIQCj+Va3U6vU2MPJ984Z9nujMhwF5RclBiJCyidPwk3j9gIhAL7eOTqs53227ElyhtsjW4LRvdM0Pt+cDjxxdHtI1XNV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60032},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"6d90a944c85c3868f0ce6734cf8e6e88ccf7fa94","mcpName":"io.github.vfa-khuongdv/redmine","scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js","prepare":"npm run build"},"_npmUser":{"name":"duongkhuong","email":"duongkhuongit@gmail.com"},"repository":{"url":"git+https://github.com/vfa-khuongdv/mcp_readmine.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for Redmine API integration with AI agents","directories":{},"_nodeVersion":"18.20.8","dependencies":{"zod":"^3.24.1","axios":"^1.7.9","dotenv":"^16.4.7","@modelcontextprotocol/sdk":"^1.0.4"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.2","@types/node":"^22.10.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-redmine_1.0.1_1764950010888_0.5636929040866756","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@duongkhuong/mcp-redmine","version":"1.1.0","keywords":["mcp","redmine","ai","agent","model-context-protocol","mcp-server","redmine-api","llm","claude","project-management"],"author":{"name":"khuongdv"},"license":"MIT","_id":"@duongkhuong/mcp-redmine@1.1.0","maintainers":[{"name":"duongkhuong","email":"duongkhuongit@gmail.com"}],"homepage":"https://github.com/vfa-khuongdv/mcp_readmine#readme","bugs":{"url":"https://github.com/vfa-khuongdv/mcp_readmine/issues"},"bin":{"mcp-redmine":"dist/index.js"},"dist":{"shasum":"aedfe88758b4bf08d213462531bceeecaf4a4fdc","tarball":"https://registry.npmjs.org/@duongkhuong/mcp-redmine/-/mcp-redmine-1.1.0.tgz","fileCount":21,"integrity":"sha512-QvqcCvQhCCFtQrprNXzYR4IfdyKgIffyh/6gzFjSs+R97jmKN5ymPH9YtFRKonN2moLHvG7zciUD0pZAv1JXLQ==","signatures":[{"sig":"MEYCIQDcPC7tizOzR7LpbVeMl6g16pfhKuEUHgZtHfCxcfLjQQIhAORdaJKkg4xnkrftQ/SdkHqCzQ3nIu/prPCw4VWENq4B","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":102500},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"a777a89d48a9df9391a1363a1a454007d71fe96a","mcpName":"io.github.vfa-khuongdv/redmine","scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js","prepare":"npm run build"},"_npmUser":{"name":"duongkhuong","email":"duongkhuongit@gmail.com"},"repository":{"url":"git+https://github.com/vfa-khuongdv/mcp_readmine.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for Redmine API integration with AI agents","directories":{},"_nodeVersion":"18.20.8","dependencies":{"zod":"^3.24.1","axios":"^1.7.9","dotenv":"^16.4.7","@modelcontextprotocol/sdk":"^1.0.4"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.2","@types/node":"^22.10.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-redmine_1.1.0_1765008179704_0.7938123043905967","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@duongkhuong/mcp-redmine","version":"1.1.1","keywords":["mcp","redmine","ai","agent","model-context-protocol","mcp-server","redmine-api","llm","claude","project-management"],"author":{"name":"khuongdv"},"license":"MIT","_id":"@duongkhuong/mcp-redmine@1.1.1","maintainers":[{"name":"duongkhuong","email":"duongkhuongit@gmail.com"}],"homepage":"https://github.com/vfa-khuongdv/mcp_readmine#readme","bugs":{"url":"https://github.com/vfa-khuongdv/mcp_readmine/issues"},"bin":{"mcp-redmine":"dist/index.js"},"dist":{"shasum":"8123cc804ae1d71b9ff2f5967b879282e1de1229","tarball":"https://registry.npmjs.org/@duongkhuong/mcp-redmine/-/mcp-redmine-1.1.1.tgz","fileCount":21,"integrity":"sha512-UgWrN8BoH6SveHqnXFwCccaaHzKRDY9lsZEIEJE5U8S8s6RTHv+2MA9JPJmA2UQZMYavu4vgDdK+mL+evPaCdg==","signatures":[{"sig":"MEUCIQCtwzq5yjEJyEQqcEwPjTIUxk5EnRK8/wO8bX5RYELEvAIgPJQuyfubDJZGkBtDgJyRiEKqrHiHbp9UWyBLuBe3EMk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111830},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"cfe40985bbee80081d12a7fec6b7eecfa289337f","mcpName":"io.github.vfa-khuongdv/redmine","scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js","prepare":"npm run build"},"_npmUser":{"name":"duongkhuong","email":"duongkhuongit@gmail.com"},"repository":{"url":"git+https://github.com/vfa-khuongdv/mcp_readmine.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for Redmine API integration with AI agents","directories":{},"_nodeVersion":"18.20.8","dependencies":{"zod":"^3.24.1","axios":"^1.7.9","dotenv":"^16.4.7","@modelcontextprotocol/sdk":"^1.0.4"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.2","@types/node":"^22.10.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-redmine_1.1.1_1765015643680_0.8084263975193606","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@duongkhuong/mcp-redmine","version":"1.1.2","keywords":["mcp","redmine","ai","agent","model-context-protocol","mcp-server","redmine-api","llm","claude","project-management"],"author":{"name":"khuongdv"},"license":"MIT","_id":"@duongkhuong/mcp-redmine@1.1.2","maintainers":[{"name":"duongkhuong","email":"duongkhuongit@gmail.com"}],"homepage":"https://github.com/vfa-khuongdv/mcp_readmine#readme","bugs":{"url":"https://github.com/vfa-khuongdv/mcp_readmine/issues"},"bin":{"mcp-redmine":"dist/index.js"},"dist":{"shasum":"983f520230116f9d790b90fe083f7f4150780a08","tarball":"https://registry.npmjs.org/@duongkhuong/mcp-redmine/-/mcp-redmine-1.1.2.tgz","fileCount":21,"integrity":"sha512-Ocul3H1WGTie9LmaZKxDLt5qFILBTiePtFiRoyXwdPu/YnLdX/65wdkxVUZrZsQlZ5vy7fd3sFySavcJXrPbgw==","signatures":[{"sig":"MEQCIAggKt3nrICu2DNj78SOgH18wZbyt6ydbBQuKK7aheUPAiArfmj088WoWBU6PO193SVk6gkYiI5qrOYG2YhUSvgXnw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":113113},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"8515fafae128c292ea991960f4a4930ad0020494","mcpName":"io.github.vfa-khuongdv/redmine","scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js","prepare":"npm run build"},"_npmUser":{"name":"duongkhuong","email":"duongkhuongit@gmail.com"},"repository":{"url":"git+https://github.com/vfa-khuongdv/mcp_readmine.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for Redmine API integration with AI agents","directories":{},"_nodeVersion":"18.20.8","dependencies":{"zod":"^3.24.1","axios":"^1.7.9","dotenv":"^16.4.7","@modelcontextprotocol/sdk":"^1.0.4"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.2","@types/node":"^22.10.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-redmine_1.1.2_1765033325584_0.7348360100000766","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@duongkhuong/mcp-redmine","version":"1.1.3","description":"MCP server for Redmine API integration with AI agents","mcpName":"io.github.vfa-khuongdv/redmine","type":"module","main":"dist/index.js","bin":{"mcp-redmine":"dist/index.js"},"scripts":{"build":"tsc","dev":"tsc --watch","start":"node dist/index.js","prepare":"npm run build","check":"npx @biomejs/biome check ./src","format":"npx @biomejs/biome check --write ./src","test":"vitest run","test:watch":"vitest"},"keywords":["mcp","redmine","ai","agent","model-context-protocol","mcp-server","redmine-api","llm","claude","project-management"],"author":{"name":"khuongdv"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/vfa-khuongdv/mcp_readmine.git"},"homepage":"https://github.com/vfa-khuongdv/mcp_readmine#readme","bugs":{"url":"https://github.com/vfa-khuongdv/mcp_readmine/issues"},"dependencies":{"@modelcontextprotocol/sdk":"^1.0.4","axios":"^1.7.9","dotenv":"^16.4.7","zod":"^3.24.1"},"devDependencies":{"@biomejs/biome":"2.3.8","@types/node":"^22.10.2","typescript":"^5.7.2","vitest":"^4.0.15"},"_id":"@duongkhuong/mcp-redmine@1.1.3","gitHead":"1039ffc3b94c7e87208cea81d59d85e3dd1f8b95","types":"./dist/index.d.ts","_nodeVersion":"20.19.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-af889GKhV+6/DsXMdTn4O9JTiqNN73MvbV9WgXDta9rxqm/Dp+ONh1kr4TSk89xMqSTD0iTiFrcfUT58ZYtLgw==","shasum":"43d46b82a1eaaa57d70aafd615c03b316f107643","tarball":"https://registry.npmjs.org/@duongkhuong/mcp-redmine/-/mcp-redmine-1.1.3.tgz","fileCount":23,"unpackedSize":121268,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDQJH+hRfWguyxnO3MIuGepy6q5cjE4fop3y6cuSFTWXAiAl/QfKjKjJCICDdbdI3gT1i9w1i28F14UZMLOKkNARSg=="}]},"_npmUser":{"name":"duongkhuong","email":"duongkhuongit@gmail.com"},"directories":{},"maintainers":[{"name":"duongkhuong","email":"duongkhuongit@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp-redmine_1.1.3_1765780870572_0.8131512907238956"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-05T15:49:37.019Z","modified":"2025-12-15T06:41:10.957Z","1.0.0":"2025-12-05T15:49:37.248Z","1.0.1":"2025-12-05T15:53:31.044Z","1.1.0":"2025-12-06T08:02:59.849Z","1.1.1":"2025-12-06T10:07:23.854Z","1.1.2":"2025-12-06T15:02:05.769Z","1.1.3":"2025-12-15T06:41:10.720Z"},"bugs":{"url":"https://github.com/vfa-khuongdv/mcp_readmine/issues"},"author":{"name":"khuongdv"},"license":"MIT","homepage":"https://github.com/vfa-khuongdv/mcp_readmine#readme","keywords":["mcp","redmine","ai","agent","model-context-protocol","mcp-server","redmine-api","llm","claude","project-management"],"repository":{"type":"git","url":"git+https://github.com/vfa-khuongdv/mcp_readmine.git"},"description":"MCP server for Redmine API integration with AI agents","maintainers":[{"name":"duongkhuong","email":"duongkhuongit@gmail.com"}],"readme":"# Redmine MCP Server\n\n[![npm version](https://badge.fury.io/js/@duongkhuong%2Fmcp-redmine.svg)](https://www.npmjs.com/package/@duongkhuong/mcp-redmine)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nMCP (Model Context Protocol) server cho phép AI agents truy cập Redmine API để lấy thông tin về tickets, projects, users và time entries.\n\n## Tính năng\n\n- ✅ Hỗ trợ xác thực kép: Basic Auth + API Key\n- ✅ 11 tools để tương tác với Redmine:\n  - `get_issues` - Lấy danh sách issues với filters\n  - `get_issue` - Lấy chi tiết issue theo ID\n  - `get_projects` - Lấy danh sách projects\n  - `get_project` - Lấy chi tiết project theo ID\n  - `get_users` - Lấy danh sách users\n  - `search_issues` - Tìm kiếm issues theo keyword\n  - `get_time_entries` - Lấy time entries\n  - `create_issue` - Tạo issue mới\n  - `update_issue` - Cập nhật issue\n  - `add_comment` - Thêm comment vào issue\n  - `delete_issue` - Xóa issue\n- ✅ Type-safe với TypeScript và Zod validation\n- ✅ Pagination support cho tất cả list endpoints\n\n## Cài đặt\n\n### Cài đặt từ npm (Khuyến nghị)\n\n```bash\nnpm install -g @duongkhuong/mcp-redmine\n```\n\n### Hoặc cài đặt từ source\n\n```bash\ngit clone git@github.com:vfa-khuongdv/mcp_readmine.git\ncd mcp_readmine\nnpm install\nnpm run build\n```\n\n### Cấu hình\n\nBạn cần cung cấp các biến môi trường sau:\n\n- `REDMINE_URL` - URL của Redmine instance (ví dụ: https://redmine.example.com)\n- `REDMINE_API_KEY` - API key từ account settings\n- `REDMINE_USERNAME` - Username cho Basic Authentication\n- `REDMINE_PASSWORD` - Password cho Basic Authentication\n\n**Lưu ý:** Redmine API yêu cầu **CẢ HAI** Basic Auth (username/password) **VÀ** API Key để xác thực.\n\n## Sử dụng\n\n### Với Claude Desktop\n\nThêm vào file cấu hình Claude Desktop:\n\n**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`\n\n**Windows**: `%APPDATA%\\Claude\\claude_desktop_config.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"redmine\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@duongkhuong/mcp-redmine\"],\n      \"env\": {\n        \"REDMINE_URL\": \"https://your-redmine-instance.com\",\n        \"REDMINE_API_KEY\": \"your_api_key_here\",\n        \"REDMINE_USERNAME\": \"your_username\",\n        \"REDMINE_PASSWORD\": \"your_password\"\n      }\n    }\n  }\n}\n```\n\nRestart Claude Desktop để load MCP server.\n\n### Với Cursor IDE\n\nThêm vào file cấu hình Cursor:\n\n**macOS/Linux**: `~/.cursor/mcp.json`\n\n**Windows**: `%APPDATA%\\Cursor\\User\\mcp.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"redmine\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@duongkhuong/mcp-redmine\"],\n      \"env\": {\n        \"REDMINE_URL\": \"https://your-redmine-instance.com\",\n        \"REDMINE_API_KEY\": \"your_api_key_here\",\n        \"REDMINE_USERNAME\": \"your_username\",\n        \"REDMINE_PASSWORD\": \"your_password\"\n      }\n    }\n  }\n}\n```\n\nRestart Cursor để load MCP server.\n\n### Với VS Code\n\n**Cách 1: Sử dụng file mcp.json (Không cần extension)**\n\nTạo hoặc chỉnh sửa file cấu hình MCP:\n\n**macOS/Linux**: `~/.vscode/mcp.json`\n\n**Windows**: `%APPDATA%\\Code\\User\\mcp.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"redmine\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@duongkhuong/mcp-redmine\"],\n      \"env\": {\n        \"REDMINE_URL\": \"https://your-redmine-instance.com\",\n        \"REDMINE_API_KEY\": \"your_api_key_here\",\n        \"REDMINE_USERNAME\": \"your_username\",\n        \"REDMINE_PASSWORD\": \"your_password\"\n      }\n    }\n  }\n}\n```\n\nReload VS Code để load MCP server.\n\n**Cách 2: Sử dụng Cline Extension**\n\n1. Cài đặt extension [Cline](https://marketplace.visualstudio.com/items?itemName=saoudrizwan.claude-dev)\n2. Mở VS Code Settings (JSON)\n3. Thêm cấu hình MCP:\n\n```json\n{\n  \"cline.mcpServers\": {\n    \"redmine\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@duongkhuong/mcp-redmine\"],\n      \"env\": {\n        \"REDMINE_URL\": \"https://your-redmine-instance.com\",\n        \"REDMINE_API_KEY\": \"your_api_key_here\",\n        \"REDMINE_USERNAME\": \"your_username\",\n        \"REDMINE_PASSWORD\": \"your_password\"\n      }\n    }\n  }\n}\n```\n\nReload VS Code để load MCP server.\n\n````\n\nReload VS Code để load MCP server.\n\n### Lấy Redmine API Key\n\n1. Đăng nhập vào Redmine\n2. Vào **My account** (góc trên bên phải)\n3. Click tab **API access key**\n4. Click **Show** để hiển thị API key\n5. Copy API key và paste vào config\n\n### Chạy standalone (Development)\n\n```bash\nnpm start\n````\n\n### Example chat with Agents\n\n```plaintext\n- Liệt kê danh sách dự án trong readmine của tôi.\n- Tạo một issue mới trong dự án có ID 1 với tiêu đề \"Fix login bug\" và mô tả \"Users cannot login with special characters in password\".\n```\n\n\n### Test với MCP Inspector\n\n```bash\nnpx @modelcontextprotocol/inspector npx -y @duongkhuong/mcp-redmine\n```\n\n## Available Tools\n\n### 1. get_issues\n\nLấy danh sách issues với optional filters.\n\n**Parameters:**\n\n- `project_id` (number, optional) - Filter theo project ID\n- `status_id` (number | \"open\" | \"closed\" | \"\\*\", optional) - Filter theo status\n- `assigned_to_id` (number, optional) - Filter theo assignee\n- `limit` (number, optional) - Số lượng kết quả (1-100, default: 25)\n- `offset` (number, optional) - Offset cho pagination (default: 0)\n\n**Example:**\n\n```json\n{\n  \"project_id\": 1,\n  \"status_id\": \"open\",\n  \"limit\": 10\n}\n```\n\n### 2. get_issue\n\nLấy chi tiết một issue theo ID, bao gồm journals, attachments, và relations.\n\n**Parameters:**\n\n- `issue_id` (number, required) - ID của issue\n\n**Example:**\n\n```json\n{\n  \"issue_id\": 123\n}\n```\n\n### 3. get_projects\n\nLấy danh sách tất cả projects.\n\n**Parameters:**\n\n- `limit` (number, optional) - Số lượng kết quả (1-100, default: 25)\n- `offset` (number, optional) - Offset cho pagination (default: 0)\n\n### 4. get_project\n\nLấy chi tiết một project theo ID.\n\n**Parameters:**\n\n- `project_id` (number, required) - ID của project\n\n### 5. get_users\n\nLấy danh sách users.\n\n**Parameters:**\n\n- `status` (\"active\" | \"registered\" | \"locked\", optional) - Filter theo status\n- `limit` (number, optional) - Số lượng kết quả (1-100, default: 25)\n- `offset` (number, optional) - Offset cho pagination (default: 0)\n\n### 6. search_issues\n\nTìm kiếm issues theo keyword trong subject.\n\n**Parameters:**\n\n- `query` (string, required) - Từ khóa tìm kiếm\n- `limit` (number, optional) - Số lượng kết quả (1-100, default: 25)\n- `offset` (number, optional) - Offset cho pagination (default: 0)\n\n**Example:**\n\n```json\n{\n  \"query\": \"bug\",\n  \"limit\": 20\n}\n```\n\n### 7. get_time_entries\n\nLấy time entries với filters.\n\n**Parameters:**\n\n- `project_id` (number, optional) - Filter theo project\n- `user_id` (number, optional) - Filter theo user\n- `from` (string, optional) - Ngày bắt đầu (YYYY-MM-DD)\n- `to` (string, optional) - Ngày kết thúc (YYYY-MM-DD)\n- `limit` (number, optional) - Số lượng kết quả (1-100, default: 25)\n- `offset` (number, optional) - Offset cho pagination (default: 0)\n\n**Example:**\n\n```json\n{\n  \"project_id\": 1,\n  \"from\": \"2024-01-01\",\n  \"to\": \"2024-12-31\"\n}\n```\n\n### 8. create_issue\n\nTạo một issue/ticket mới trong Redmine.\n\n**Parameters:**\n\n- `project_id` (number, required) - ID của project\n- `subject` (string, required) - Tiêu đề của issue\n- `description` (string, optional) - Mô tả chi tiết\n- `tracker_id` (number, optional) - ID của tracker (Bug, Feature, Support...)\n- `status_id` (number, optional) - ID của status\n- `priority_id` (number, optional) - ID của priority\n- `assigned_to_id` (number, optional) - ID của user được assign\n- `start_date` (string, optional) - Ngày bắt đầu (YYYY-MM-DD)\n- `due_date` (string, optional) - Ngày deadline (YYYY-MM-DD)\n- `done_ratio` (number, optional) - Phần trăm hoàn thành (0-100)\n\n**Example:**\n\n```json\n{\n  \"project_id\": 1,\n  \"subject\": \"Fix login bug\",\n  \"description\": \"Users cannot login with special characters in password\",\n  \"tracker_id\": 1,\n  \"priority_id\": 3,\n  \"assigned_to_id\": 5\n}\n```\n\n### 9. update_issue\n\nCập nhật một issue/ticket đã tồn tại. Chỉ các fields được cung cấp sẽ được cập nhật.\n\n**Parameters:**\n\n- `issue_id` (number, required) - ID của issue cần update\n- `project_id` (number, optional) - Chuyển issue sang project khác\n- `subject` (string, optional) - Cập nhật tiêu đề\n- `description` (string, optional) - Cập nhật mô tả\n- `tracker_id` (number, optional) - Thay đổi tracker\n- `status_id` (number, optional) - Thay đổi status\n- `priority_id` (number, optional) - Thay đổi priority\n- `assigned_to_id` (number, optional) - Reassign cho user khác\n- `start_date` (string, optional) - Cập nhật ngày bắt đầu (YYYY-MM-DD)\n- `due_date` (string, optional) - Cập nhật deadline (YYYY-MM-DD)\n- `done_ratio` (number, optional) - Cập nhật phần trăm hoàn thành (0-100)\n- `notes` (string, optional) - Thêm ghi chú về update này\n\n**Example:**\n\n```json\n{\n  \"issue_id\": 123,\n  \"status_id\": 3,\n  \"done_ratio\": 80,\n  \"notes\": \"Almost done, just need final testing\"\n}\n```\n\n### 10. add_comment\n\nThêm comment/ghi chú vào một issue. Đây là cách đơn giản để thêm comment mà không cần update các fields khác.\n\n**Parameters:**\n\n- `issue_id` (number, required) - ID của issue\n- `notes` (string, required) - Nội dung comment\n\n**Example:**\n\n```json\n{\n  \"issue_id\": 123,\n  \"notes\": \"I've reviewed the code and it looks good to merge\"\n}\n```\n\n### 11. delete_issue\n\nXóa một issue/ticket khỏi Redmine.\n\n**Parameters:**\n\n- `issue_id` (number, required) - ID của issue cần xóa\n\n**Example:**\n\n```json\n{\n  \"issue_id\": 123\n}\n```\n\n## Roadmap / Future Tools\n\nCác tools dự kiến sẽ được support trong tương lai:\n\n- #NA\n\n## Development\n\n### Watch mode\n\n```bash\nnpm run dev\n```\n\n### Project structure\n\n```\nmcp-redmine/\n├── src/\n│   ├── index.ts          # MCP server entry point\n│   ├── redmine-client.ts # Redmine API client\n│   ├── tools.ts          # MCP tool definitions\n│   └── types.ts          # TypeScript types & Zod schemas\n├── dist/                 # Compiled JavaScript\n├── .env                  # Environment variables (gitignored)\n├── .env.example          # Environment template\n├── package.json\n└── tsconfig.json\n```\n\n## Troubleshooting\n\n### Authentication errors\n\nĐảm bảo bạn đã cung cấp đầy đủ:\n\n- ✅ REDMINE_URL (không có trailing slash)\n- ✅ REDMINE_API_KEY (từ account settings)\n- ✅ REDMINE_USERNAME\n- ✅ REDMINE_PASSWORD\n\n### Connection errors\n\n- Kiểm tra REDMINE_URL có đúng không\n- Kiểm tra network/firewall có block không\n- Verify API key còn valid không\n\n### Tool not found\n\n- Đảm bảo đã build: `npm run build`\n- Restart Claude Desktop sau khi update config\n\n## License\n\nMIT\n","readmeFilename":"README.md"}