Redmine integration skill - URL parsing, issue query and management (Rust implementation)
Redmine integration skill with 35 tools, supporting URL parsing and natural language queries.
Rust implementation - High performance MCP server with Log Viewer.
| User Says | Action |
|---|---|
| my tasks | redmine_get_issues({ assigned_to_id: "me", status_id: "open" }) |
| project list | redmine_get_projects() |
| who am I | redmine_get_current_user() |
| reply to Issue #123 | redmine_update_issue({ id: 123, notes: "..." }) |
| log time | redmine_create_time_entry({ hours: N, ... }) |
| search "keyword" |
redmine_search({ q: "keyword" }) |
| download attachment | redmine_download({ attachment_id: N, save_path: "/path" }) |
| open log viewer | redmine_log_viewer({ open: true }) |
Detect Redmine URL type and automatically call corresponding API:
/issues/{id} → redmine_get_issue(id)
/projects/{pid}/issues → redmine_get_issues(project_id)
/projects/{pid}/issues?...→ redmine_get_issues + parse filters
| Web Query | API Parameter |
|---|---|
op[status_id]=o | status_id: "open" |
op[status_id]=c | status_id: "closed" |
op[assigned_to_id]=! & v[]=42 | assigned_to_id: "!42" |
See full mapping at {baseDir}/references/operators.md.
Get issues list with various filters.
| Parameter | Type | Description | Example |
|---|---|---|---|
project_id | string | Project ID or identifier | "my-project" |
tracker_id | number | Tracker ID | 20 |
status_id | string | Status: open/closed/*/number | "open" |
assigned_to_id | string | Assignee: me/ID/!ID | "me", "!42" |
limit | number | Max results (max 100) | 25 |
offset | number | Skip count (pagination) | 0 |
sort | string | Sort field | "updated_on:desc" |
Get single issue details with journals and attachments.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | ✓ | Issue ID |
Update issue: add notes, change status, assignee, progress.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | ✓ | Issue ID |
notes | string | Notes (supports Textile markup) | |
status_id | number | Status ID | |
assigned_to_id | number | Assignee ID | |
done_ratio | number | Progress percentage (0-100) | |
priority_id | number | Priority ID |
Create time entry.
| Parameter | Type | Required | Description |
|---|---|---|---|
hours | number | ✓ | Hours spent |
issue_id | number | Issue ID (or project_id) | |
project_id | string | Project ID | |
activity_id | number | Activity type ID | |
comments | string | Comments | |
spent_on | string | Date (YYYY-MM-DD), defaults to today |
Full-text search across Issues, Wiki, News, etc.
| Parameter | Type | Required | Description |
|---|---|---|---|
q | string | ✓ | Search keyword |
scope | string | all/issues/wiki_pages/news/... | |
project_id | string | Limit to project | |
limit | number | Max results | |
offset | number | Skip count |
Create issue relation.
| Parameter | Type | Required | Description |
|---|---|---|---|
issue_id | number | ✓ | Source Issue ID |
issue_to_id | number | ✓ | Target Issue ID |
relation_type | string | ✓ | Relation type |
delay | number | Delay days (precedes/follows) |
Relation types: relates, duplicates, blocks, blocked, precedes, follows, copied_to, copied_from
Generic API for custom Redmine API calls.
| Parameter | Type | Required | Description |
|---|---|---|---|
path | string | ✓ | API path, e.g. /issues.json |
method | string | HTTP method: get/post/put/delete | |
data | object | Request body (POST/PUT) | |
params | object | Query parameters |
Get Log Viewer URL or open in browser.
| Parameter | Type | Required | Description |
|---|---|---|---|
open | boolean | Open browser (default: false) |
Response:
{ "url": "http://localhost:3456", "opened": true }
**Issue #{id}**
| Field | Value |
|-------|-------|
| Subject | {subject} |
| Status | {status} |
| Assignee | {assigned_to} |
| Progress | {done_ratio}% |
| ID | Subject | Status | Assigned | Updated |
|----|---------|--------|----------|---------|
Real-time log viewer with WebSocket support.
Environment Variables:
| Variable | Default | Description |
|---|---|---|
LOG_VIEWER | true | Enable/disable |
LOG_VIEWER_PORT | 3456 | Server port |
LOG_VIEWER_OPEN | true | Auto open browser |
Features:
| Resource | Purpose | Load When |
|---|---|---|
{baseDir}/references/api-reference.md | Full 35 API parameter docs | Need advanced params |
{baseDir}/references/file-operations.md | File upload/download | Handle attachments |
{baseDir}/references/advanced-api.md | redmine_request usage | Use generic API |
{baseDir}/references/textile-syntax.md | Textile markup syntax | Write formatted content |
{baseDir}/references/examples.md | Usage examples | Learn usage |
{baseDir}/references/operators.md | URL filter mapping | Parse URL params |
Redmine Skill v2.0.0 - Rust Implementation