Skip to content

Ticket Management Tools

This document provides comprehensive documentation for all 12 ticket management tools available in the Gira MCP server. These tools provide complete lifecycle management for tickets, from creation to archival.

🎫 Tool Overview

Tool Description Category
list_tickets List tickets with optional filtering Query
get_ticket Get detailed information about a specific ticket Query
create_ticket Create a new ticket Create
update_ticket Update an existing ticket's fields Update
move_ticket Move a ticket to a different status/swimlane Update
assign_ticket Assign a ticket to someone Update
add_comment Add a comment to a ticket Comments
list_comments List comments for a ticket Comments
search_tickets Search tickets using full-text search Advanced Query
filter_tickets Advanced filtering with multiple criteria Advanced Query
get_board_state Get current board state visualization Board
bulk_update Update multiple tickets with the same changes Bulk Operations
archive_tickets Archive completed tickets Archive

📋 Query Tools

list_tickets

List tickets with optional filtering capabilities.

Parameters: - status (string, optional): Filter by status (todo, in_progress, review, done) - assignee (string, optional): Filter by assignee email or name - priority (string, optional): Filter by priority (low, medium, high, critical) - type (string, optional): Filter by type (task, bug, feature, epic, subtask) - epic (string, optional): Filter by epic ID - labels (array[string], optional): Filter by labels (must contain all specified) - limit (integer, optional): Maximum tickets to return (1-1000)

Returns: Array of ticket summaries containing: - id: Ticket identifier (e.g., GCM-123) - title: Ticket title - status: Current status - priority: Priority level - type: Ticket type - assignee: Assigned person (if any) - epic_id: Associated epic (if any) - labels: List of labels - created_at: Creation timestamp - updated_at: Last update timestamp

Examples:

// List all open tickets
{"status": "todo"}

// List high priority bugs
{"type": "bug", "priority": "high"}

// List tickets assigned to a specific person
{"assignee": "john@example.com", "limit": 20}

// List tickets in a specific epic
{"epic": "EPIC-001"}

Security: Read-only operation, rate limited to 50 calls per minute.


get_ticket

Get detailed information about a specific ticket.

Parameters: - ticket_id (string, required): Ticket ID to retrieve

Returns: Detailed ticket object containing: - id: Ticket identifier - title: Ticket title
- description: Full description - status: Current status - priority: Priority level - type: Ticket type - reporter: Person who created the ticket - assignee: Assigned person (if any) - epic_id: Associated epic (if any) - parent_id: Parent ticket for subtasks (if any) - labels: List of labels - story_points: Estimation (if set) - custom_fields: Additional custom data - created_at: Creation timestamp - updated_at: Last update timestamp

Examples:

// Get ticket details
{"ticket_id": "GCM-123"}

// ID normalization is automatic
{"ticket_id": "123"}  // Becomes GCM-123
{"ticket_id": "gcm-123"}  // Becomes GCM-123

Error Handling: - Returns error if ticket not found - Validates ticket ID format

Security: Read-only operation, no rate limiting.


✨ Creation Tools

create_ticket

Create a new ticket with full metadata support.

Parameters: - title (string, required): Ticket title (1-200 characters) - description (string, optional): Detailed description - priority (string, optional): Priority level, default: "medium" - type (string, optional): Ticket type, default: "task" - assignee (string, optional): Assignee email or name - epic (string, optional): Epic ID to associate with - parent (string, optional): Parent ticket ID for subtasks - labels (array[string], optional): List of labels - story_points (integer, optional): Story points estimate (0-100) - status (string, optional): Initial status (uses project default if not specified) - custom_fields (object, optional): Custom field values

Returns: Created ticket object with: - id: Newly assigned ticket ID - success: True if created successfully - ticket: Full ticket details

Examples:

// Basic ticket creation
{
  "title": "Fix login bug",
  "type": "bug",
  "priority": "high"
}

// Feature with epic and estimation
{
  "title": "Add user dashboard",
  "description": "Create a personalized dashboard for users",
  "type": "feature",
  "epic": "EPIC-001",
  "story_points": 8,
  "labels": ["frontend", "dashboard"]
}

// Subtask creation
{
  "title": "Write unit tests",
  "parent": "GCM-123",
  "type": "subtask",
  "assignee": "developer@example.com"
}

Validation: - Title must be 1-200 characters - Priority must be valid (low, medium, high, critical) - Type must be valid (task, bug, feature, epic, subtask) - Story points must be 0-100 - Epic and parent IDs are validated if provided

Security: Requires confirmation if configured, audit logged.


🔄 Update Tools

update_ticket

Update an existing ticket's fields.

Parameters: - ticket_id (string, required): Ticket ID to update - title (string, optional): New title - description (string, optional): New description - priority (string, optional): New priority - type (string, optional): New type - assignee (string, optional): New assignee - epic (string, optional): New epic association - parent (string, optional): New parent ticket - labels (array[string], optional): Replace labels - story_points (integer, optional): New story points - custom_fields (object, optional): Update custom fields

Returns: - success: True if updated successfully - updated_fields: List of fields that were changed - ticket: Updated ticket details

Examples:

// Update priority and assignee
{
  "ticket_id": "GCM-123",
  "priority": "critical",
  "assignee": "jane@example.com"
}

// Add story points and labels
{
  "ticket_id": "GCM-456", 
  "story_points": 5,
  "labels": ["backend", "api", "high-priority"]
}

// Move to different epic
{
  "ticket_id": "GCM-789",
  "epic": "EPIC-002"
}

Security: Requires confirmation if configured, audit logged.


move_ticket

Move a ticket to a different status/swimlane.

Parameters: - ticket_id (string, required): Ticket ID to move - target_status (string, required): Target status - comment (string, optional): Comment about the move

Returns: - success: True if moved successfully - old_status: Previous status - new_status: New status - ticket: Updated ticket details

Examples:

// Move ticket to in progress
{
  "ticket_id": "GCM-123",
  "target_status": "in_progress",
  "comment": "Starting work on this"
}

// Complete a ticket
{
  "ticket_id": "GCM-456",
  "target_status": "done"
}

Validation: - Target status must be valid for the project - Validates ticket exists and is moveable

Security: Audit logged, comment auto-generated if not provided.


assign_ticket

Assign a ticket to someone.

Parameters: - ticket_id (string, required): Ticket ID to assign - assignee (string, required): Assignee email or name - comment (string, optional): Comment about the assignment

Returns: - success: True if assigned successfully - old_assignee: Previous assignee (if any) - new_assignee: New assignee - ticket: Updated ticket details

Examples:

// Assign to team member
{
  "ticket_id": "GCM-123",
  "assignee": "developer@example.com",
  "comment": "Best person for this task"
}

// Unassign ticket  
{
  "ticket_id": "GCM-456",
  "assignee": "",
  "comment": "Putting back in pool"
}

Security: Audit logged, validates assignee exists.


💬 Comment Tools

add_comment

Add a comment to a ticket.

Parameters: - ticket_id (string, required): Ticket ID to comment on - content (string, required): Comment content - author (string, optional): Comment author (defaults to system user)

Returns: - success: True if comment added - comment_id: ID of the new comment - comment: Full comment details

Examples:

// Add progress update
{
  "ticket_id": "GCM-123",
  "content": "Updated the user interface as requested"
}

// Add comment with specific author
{
  "ticket_id": "GCM-456", 
  "content": "Needs more testing before release",
  "author": "qa@example.com"
}

Security: Audit logged, content length limited.


list_comments

List comments for a ticket.

Parameters: - ticket_id (string, required): Ticket ID to get comments for - limit (integer, optional): Maximum comments to return

Returns: Array of comments containing: - id: Comment ID - content: Comment text - author: Comment author - created_at: Creation timestamp - ticket_id: Associated ticket ID

Examples:

// Get all comments
{"ticket_id": "GCM-123"}

// Get recent comments
{"ticket_id": "GCM-123", "limit": 5}

Security: Read-only operation.


🔍 Advanced Query Tools

search_tickets

Search tickets using full-text search across titles, descriptions, and comments.

Parameters: - query (string, required): Search query - status (string, optional): Limit to specific status - type (string, optional): Limit to specific type - limit (integer, optional): Maximum results (default: 50)

Returns: Array of matching tickets with relevance scores: - Standard ticket summary fields - relevance_score: Search relevance (0-1) - matched_fields: Which fields matched the query

Examples:

// Search for bug tickets
{
  "query": "login error authentication",
  "type": "bug"
}

// Search in specific status
{
  "query": "dashboard feature",
  "status": "in_progress",
  "limit": 10
}

Security: Read-only operation, rate limited.


filter_tickets

Advanced filtering of tickets with multiple criteria and sorting.

Parameters: - filters (object, required): Complex filter criteria - sort_by (string, optional): Sort field - sort_order (string, optional): asc or desc - limit (integer, optional): Maximum results

Returns: Array of filtered tickets with metadata: - Filtered ticket summaries - total_count: Total matching tickets - filters_applied: Summary of applied filters

Examples:

// Complex filtering
{
  "filters": {
    "priority": ["high", "critical"],
    "assignee": "team@example.com",
    "created_after": "2024-01-01",
    "labels_any": ["urgent", "customer-facing"]
  },
  "sort_by": "updated_at",
  "sort_order": "desc"
}

Security: Read-only operation, complex filters may be rate limited.


📊 Board Tools

get_board_state

Get current board state visualization with ticket counts and summaries.

Parameters: - include_tickets (boolean, optional): Include full ticket details - status_filter (array[string], optional): Limit to specific statuses

Returns: Board state object containing: - columns: Board columns with ticket counts - tickets: Tickets organized by status (if requested) - summary: Overall board statistics - timestamp: State capture time

Examples:

// Basic board state
{}

// Board with ticket details
{"include_tickets": true}

// Limited to active work
{"status_filter": ["todo", "in_progress", "review"]}

Security: Read-only operation.


🔧 Bulk Operations

bulk_update

Update multiple tickets with the same changes efficiently.

Parameters: - ticket_ids (array[string], required): List of ticket IDs to update - updates (object, required): Fields to update on all tickets - comment (string, optional): Comment to add to all tickets

Returns: - success: True if operation completed - updated_count: Number of tickets successfully updated - failed_tickets: List of tickets that couldn't be updated - updated_tickets: List of successfully updated ticket summaries

Examples:

// Bulk priority update
{
  "ticket_ids": ["GCM-123", "GCM-456", "GCM-789"],
  "updates": {
    "priority": "high"
  },
  "comment": "Escalated due to customer impact"
}

// Bulk epic assignment
{
  "ticket_ids": ["GCM-100", "GCM-101", "GCM-102"],
  "updates": {
    "epic": "EPIC-001",
    "labels": ["q4-release"]
  }
}

Security: High-impact operation, requires confirmation, heavily audit logged.


📦 Archive Tools

archive_tickets

Archive completed tickets to clean up the active board.

Parameters: - criteria (object, optional): Criteria for auto-archiving - ticket_ids (array[string], optional): Specific tickets to archive - dry_run (boolean, optional): Preview what would be archived

Returns: - success: True if archiving completed - archived_count: Number of tickets archived - archived_tickets: List of archived ticket summaries - skipped_tickets: Tickets that couldn't be archived

Examples:

// Archive all done tickets older than 30 days
{
  "criteria": {
    "status": "done",
    "completed_before": "2024-01-01"
  }
}

// Archive specific tickets
{
  "ticket_ids": ["GCM-123", "GCM-456"]
}

// Preview archiving
{
  "criteria": {"status": "done"},
  "dry_run": true
}

Security: Destructive operation, requires confirmation, heavily audit logged.


🔒 Security & Best Practices

Rate Limiting

  • list_tickets: 50 calls/minute
  • search_tickets: 20 calls/minute
  • filter_tickets: 10 calls/minute
  • bulk_update: 5 calls/minute
  • archive_tickets: 2 calls/minute

Confirmation Requirements

These operations require confirmation when require_confirmation=true: - create_ticket - update_ticket - move_ticket - assign_ticket - bulk_update - archive_tickets

Audit Logging

All operations are logged with: - Timestamp - Operation name - Parameters (if verbose logging enabled) - Success/failure status - User context

Input Validation

  • All ticket IDs are normalized (GCM- prefix added if missing)
  • String lengths are enforced
  • Enum values are validated
  • Required fields are checked

Error Handling

Common error scenarios: - NotFoundError: Ticket doesn't exist - ValidationError: Invalid parameters - MCPToolError: General operation failures - PermissionError: Security restrictions


For board visualization tools, see Board Tools. For epic management, see Epic Tools. For sprint planning, see Sprint Tools.