WeTrack Enterprise MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MCP_HOST | No | SSE host (default: 0.0.0.0) | |
| MCP_PORT | No | SSE port (default: 8000) | |
| MCP_TRANSPORT | No | stdio (default) or sse | |
| WETRACK_EMAIL | No | Login email | |
| WETRACK_TOKEN | No | Pre-set JWT token (skips auto-login) | |
| WETRACK_BASE_URL | Yes | API base URL (staging or production) | |
| WETRACK_PASSWORD | No | Login password |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| wetrack_sign_inA | Sign in to WeTrack with email and password. Returns a JWT token stored for all future requests. Use this first if you haven't set WETRACK_EMAIL/PASSWORD in .env. |
| wetrack_sign_outA | Sign out from WeTrack and clear the current session token. |
| wetrack_get_current_userA | Get the currently authenticated user's profile and sidebar permissions. Useful to verify who is logged in and what their role is. |
| wetrack_change_passwordA | Change the logged-in user's password. Args: current_password: The user's current password. new_password: The new password to set. confirm_password: Must match new_password exactly. |
| wetrack_forgot_passwordA | Trigger a password reset email for a user. Args: email: The email address of the user who forgot their password. |
| wetrack_set_passwordA | Set the initial password for the currently authenticated user (used during first-time login flows). Args: password: The new password to set. |
| wetrack_impersonateA | [Admin only] Start an impersonation session — log in AS another user. Use wetrack_exit_impersonation to restore the admin session. Args: target_user_id: UUID of the user to impersonate. |
| wetrack_exit_impersonationA | Exit the current impersonation session and restore the administrator session. Only works if you previously called wetrack_impersonate. |
| wetrack_list_ticketsA | List and filter tickets (work items and support tickets). Args: project_id: Filter by project UUID. Comma-separated for multiple. ticket_type: Filter by type — EPIC, STORY, TASK, BUG (comma-separated). sprint_id: Sprint UUID. Pass 'null' or 'unassigned' for backlog. status_id: Status ID(s), comma-separated. priority_id: Priority ID(s), comma-separated. search: Case-insensitive search against title or summary. assigned_to_me: If true, only show tickets assigned to me. is_backlog: If true, only show backlog tickets (no sprint assigned). is_active_sprint: If true, only show tickets in the active sprint. due_date: Filter bucket — 'Overdue', 'Due Today', 'Due This Week', 'Due This Month', 'No Due Date'. sort_order: 'asc' or 'desc' (default: desc = newest first). view: Response shape — 'default' (full), 'card' (board), 'summary' (dropdown). page: Page number (default: 1). limit: Rows per page, max 100 (default: 20). |
| wetrack_get_ticketA | Get full details of a single ticket by its ID. Returns different shapes for work items (EPIC/STORY/TASK/BUG) vs support tickets. Args: ticket_id: The ticket UUID or numeric ID. |
| wetrack_create_work_itemA | Create a new work item — EPIC, STORY, TASK, or BUG. Args: ticket_type: 'EPIC', 'STORY', 'TASK', or 'BUG'. title: Work item title (Epic Name / Story Name / Task Name / Bug Title). summary: Short summary of the work item. project_id: UUID of the project this belongs to. priority_id: Integer ID of the priority (get from wetrack_list_ticket_priorities). status_id: Status ID (defaults to 'To Do' if omitted). description: Optional rich text description (HTML supported). Required for BUG. assignees: List of user UUIDs to assign. First becomes primary assignee. start_date: ISO datetime string e.g. '2026-09-01T00:00:00Z'. end_date: ISO datetime string. Must be after start_date. tags: List of string tags. sprint_id: UUID of the sprint to assign this to (optional). story_points: Integer story points. Required for STORY, optional for TASK/BUG. bug_type: Bug category string. Required for BUG type only. parent_id: Integer ID of parent EPIC (for STORY/TASK/BUG only). |
| wetrack_create_support_ticketA | Create a legacy support ticket (not an EPIC/STORY/TASK/BUG work item). Args: title: Ticket title e.g. 'Login issue on portal'. request_status_id: Integer status ID. request_priority_id: Integer priority ID. organisation_id: UUID of the client organisation. project_id: UUID of the project. description: Rich HTML description (up to 2MB). request_type_id: Optional ticket type ID. category_id: Optional category ID. assigned_to: Optional user integer ID to assign. reporting_to: Optional reporter user integer ID. due_date: ISO datetime for due date. start_date: ISO datetime for start. estimate: Estimated hours (float). |
| wetrack_update_ticketA | Update a ticket's fields. Only fields you provide are changed. Args: ticket_id: UUID of the ticket to update. title: New title. description: New rich HTML description. request_status_id: New status ID. request_priority_id: New priority ID. assignees: New list of assignee user UUIDs (replaces all existing assignees). summary: New short summary. story_points: New story points (positive integer). bug_type: New bug category. tags: New tag list (replaces existing). end_date: New due date (ISO datetime). parent_id: Reassign to a different parent EPIC. sprint_id: Move to a different sprint UUID. |
| wetrack_get_ticket_commentsA | Get all comments on a ticket, in chronological order. Args: ticket_id: The ticket UUID. |
| wetrack_add_ticket_commentB | Add a comment to a ticket. Args: ticket_id: The ticket UUID. comment: Comment text e.g. 'Investigating the issue now.' |
| wetrack_get_ticket_historyA | Get the full audit history/changelog for a ticket. Shows every field change with who made it and when. Args: ticket_id: The ticket UUID. |
| wetrack_get_ticket_attachmentsB | List all file attachments on a ticket. Args: ticket_id: The ticket UUID. |
| wetrack_add_ticket_attachmentA | Add a file attachment to a ticket (the file must already be uploaded to S3). Use wetrack_get_upload_presign_url to upload to S3 first, then call this. Args: ticket_id: The ticket UUID. url: S3 URL of the uploaded file. file_name: Original file name e.g. 'screenshot.png'. file_size: File size in bytes. file_type: MIME type e.g. 'image/png'. |
| wetrack_delete_ticket_attachmentB | Delete an attachment from a ticket. Args: ticket_id: The ticket UUID. attachment_id: The attachment UUID to delete. |
| wetrack_get_ticket_watchersA | Get the watch/follow status and list of watchers for a ticket. Args: ticket_id: The ticket UUID. |
| wetrack_toggle_ticket_watchA | Toggle your watch/follow status on a ticket. If you're not watching, this starts watching. If you are, it stops. Args: ticket_id: The ticket UUID. |
| wetrack_list_projectsA | List projects with filtering, search, and pagination. Args: minimal: If True, returns lightweight {id, name} list for dropdowns. search: Search by name, key, description, or manager name. status: Filter by status — 'NOT_STARTED', 'IN_PROGRESS', 'COMPLETED', 'ON_HOLD'. start_date: Filter projects starting on/after this date (YYYY-MM-DD). end_date: Filter projects ending on/before this date (YYYY-MM-DD). sort: Sort field — 'name', 'key', 'status', 'start_date', 'end_date', 'created_at'. order: Sort direction — 'asc' or 'desc'. page: Page number (default: 1). limit: Items per page (default: 10). |
| wetrack_get_projectC | Get full details of a single project. Args: project_id: The project UUID. |
| wetrack_create_projectA | Create a new project. Sprints are auto-generated from the timeline. Args: name: Project name e.g. 'WeTrack Platform'. key: Short unique key e.g. 'WTP' (used as ticket prefix). start_date: Project start date — 'YYYY-MM-DD'. end_date: Project end date — 'YYYY-MM-DD'. manager_id: UUID of the project manager user. description: Project description text. sprint_duration_weeks: Sprint length in weeks (default: 2). color: Hex color for the project card e.g. '#10B981'. tags: List of tag strings e.g. ['Internal', 'Platform']. |
| wetrack_update_projectA | Update a project's fields (partial update — only send what changes). Changing timeline recalculates sprints automatically. Args: project_id: The project UUID. name: New project name. manager_id: UUID of new project manager. description: New description. start_date: New start date 'YYYY-MM-DD'. end_date: New end date 'YYYY-MM-DD'. sprint_duration_weeks: New sprint duration in weeks. color: New hex color. tags: New tag list (replaces existing). |
| wetrack_delete_projectA | Soft-delete a project (it becomes inactive but data is retained). Args: project_id: The project UUID to delete. |
| wetrack_get_recent_projectsA | Get the most recently accessed projects for the authenticated user. Args: limit: Max projects to return (1-10, default: 4). |
| wetrack_get_project_statsA | Get dashboard statistics — summary totals, top projects by progress, and upcoming project deadlines. Args: top_limit: Number of top projects to return (default: 5). deadlines_limit: Number of upcoming deadlines to return (default: 3). |
| wetrack_get_project_overviewA | Get the complete overview dashboard analytics for a project — includes KPIs, ticket distributions, team stats, and progress. Args: project_id: The project UUID. |
| wetrack_get_project_reportsC | Get comprehensive reports and analytics for a project. Args: project_id: The project UUID. sprint_id: Optional sprint UUID to scope stats to a specific sprint. |
| wetrack_get_project_usersA | Get all team members mapped to a project (derived from ticket assignees). Returns {id, name, email, role, designation} per user. Args: project_id: The project UUID. |
| wetrack_get_project_sprintsA | Get all sprints for a project including statistics and progress metrics. Args: project_id: The project UUID. |
| wetrack_record_project_accessA | Record that the current user accessed a project (updates 'recently accessed' list). Args: project_id: The project UUID. |
| wetrack_list_project_filesA | Get all files, folders, and ticket attachments for a project with storage stats. Args: project_id: The project UUID. folder_id: Filter to a specific folder UUID (pass 'root' or omit for root level). search: Search files/folders by name. |
| wetrack_add_project_fileA | Register an already-uploaded S3 file in project files. Upload to S3 first using wetrack_get_upload_presign_url, then call this. Args: project_id: The project UUID. file_name: The file name e.g. 'requirements.pdf'. file_size: File size in bytes. s3_url: The S3 URL returned from the upload. file_type: MIME type e.g. 'application/pdf'. folder_id: UUID of the folder to place the file in. |
| wetrack_delete_project_fileC | Delete a project file record. Args: project_id: The project UUID. file_id: The file UUID to delete. |
| wetrack_create_project_folderA | Create a folder (or sub-folder) inside a project's file storage. Args: project_id: The project UUID. name: Folder name e.g. '01. Requirements'. parent_folder_id: UUID of parent folder for sub-folders. |
| wetrack_delete_project_folderC | Delete a folder from a project. Args: project_id: The project UUID. folder_id: The folder UUID to delete. |
| wetrack_list_sprintsA | List sprints across all projects or scoped to one project. Args: project_id: Filter to a single project's sprints (UUID). search: Case-insensitive substring match against sprint name. status: Comma-separated sprint statuses — 'PLANNED', 'IN_PROGRESS', 'COMPLETED'. include_completed: Pass False to exclude completed sprints. page: Page number (default: 1). limit: Items per page (default: 10). |
| wetrack_get_sprintA | Get full details of a single sprint. Args: sprint_id: The sprint UUID. |
| wetrack_create_sprintA | Create a sprint manually for a project. Args: project_id: UUID of the project this sprint belongs to. name: Sprint name e.g. 'Sprint 3'. start_date: Start date 'YYYY-MM-DD'. end_date: End date 'YYYY-MM-DD'. goal: Sprint goal description e.g. 'Complete user auth module'. status: Initial status — 'PLANNED' (default), 'IN_PROGRESS', or 'COMPLETED'. |
| wetrack_update_sprintA | Update sprint details, status, or goal. Args: sprint_id: The sprint UUID. name: New sprint name. start_date: New start date 'YYYY-MM-DD'. end_date: New end date 'YYYY-MM-DD'. goal: New sprint goal text. status: New status — 'PLANNED', 'IN_PROGRESS', or 'COMPLETED'. move_to: Where to move unfinished tickets when completing a sprint. Use 'BACKLOG' or a target sprint UUID. |
| wetrack_delete_sprintA | Delete a sprint and unassign all linked tickets back to backlog. Args: sprint_id: The sprint UUID to delete. |
| wetrack_list_usersA | Retrieve the list of users in the organisation. Args: role: Filter by role — 'ADMIN', 'VITHI_USER', 'EMPLOYEE', 'CUSTOMER'. is_dropdown: If True, returns lightweight {id, name} for dropdowns. If False/omitted, returns full user details including designation. |
| wetrack_get_userB | Get a single user's details by their ID. Args: user_id: The user UUID or integer ID. |
| wetrack_create_userA | Create a single user account and send an invitation email. Args: first_name: User's first name e.g. 'Jane'. last_name: User's last name e.g. 'Smith'. email: User's email e.g. 'jane@company.com'. role: Access role — 'ADMIN', 'VITHI_USER', 'EMPLOYEE', or 'CUSTOMER'. designation: Job title e.g. 'Senior Backend Engineer'. user_name: Optional username override. |
| wetrack_bulk_create_usersA | Bulk create multiple user accounts at once. Args: users: List of user objects. Each must have: {first_name, last_name, email, role} — and optionally user_name. skip_invite_email: Set True for SSO-only users who won't use password login. Example users list: [ {"first_name": "Alice", "last_name": "Wong", "email": "alice@co.com", "role": "VITHI_USER"}, {"first_name": "Bob", "last_name": "Jones", "email": "bob@co.com", "role": "EMPLOYEE"} ] |
| wetrack_update_userC | Update a user's profile fields. Args: user_id: The user UUID or integer ID. first_name: New first name. last_name: New last name. role: New role — 'ADMIN', 'VITHI_USER', 'EMPLOYEE', 'CUSTOMER'. designation: New job title. Cannot be an empty string. |
| wetrack_resend_inviteB | Resend the invitation email to a user who hasn't set their password yet. Args: user_id: The user UUID or integer ID. |
| wetrack_list_clientsA | Retrieve list of all client organisations accessible by the current user. |
| wetrack_get_clientC | Get details of a specific client organisation. Args: client_id: The client/organisation ID. |
| wetrack_create_clientA | Create a new client organisation. Args: name: Organisation name e.g. 'Acme Corp'. email: Primary contact email e.g. 'contact@acme.com'. contact_name: Primary contact person name e.g. 'John Doe'. address: Physical address e.g. '123 Tech Park'. phone: Organisation phone number. contact_email: Contact person's email (if different from org email). contact_phone: Contact person's phone. code: Short org code e.g. 'AC'. country: Country name. timezone_id: Timezone integer ID (get from wetrack_list_timezones). |
| wetrack_update_clientB | Update a client organisation's details. Args: client_id: The client ID. name: Organisation name (required). email: Primary email (required). phone: Phone number. contact_name: Primary contact person name. contact_email: Contact email. contact_phone: Contact phone. address: Physical address. country: Country name. timezone_id: Timezone integer ID. |
| wetrack_add_client_membersC | Assign or update the members associated with a client organisation. Args: client_id: The client ID. member_ids: List of integer user IDs to associate with this client e.g. [1, 2, 5]. |
| wetrack_list_organisationsA | Retrieve the list of all organisations in the system. |
| wetrack_create_organisationB | Create a new organisation. Args: name: Organisation name e.g. 'Vithi IT Solutions'. email: Contact email e.g. 'contact@vithi.com'. contact_name: Primary contact person e.g. 'Jane Doe'. slug: URL slug e.g. 'vithi'. phone: Phone number. |
| wetrack_get_dashboardA | Get the aggregated dashboard — KPIs, Team Workload, Status Donut, Project Health, Pending Tickets, and Sprint Burndown. Args: project_id: Scope dashboard to a specific project UUID. sprint_id: Specify a sprint UUID for the burndown chart. |
| wetrack_get_reportsA | Unified Reports Dashboard — scoped dynamically for Admin/Manager/Employee. Includes stat cards, status/priority distributions, project progress, sprint burndown, and summary table. Args: project_id: Filter by project UUID. sprint_id: Filter by sprint UUID. status_id: Filter by ticket status ID. priority_id: Filter by ticket priority ID. user_id: Scope to tickets assigned to this user UUID. burndown_range: Burndown scope — 'this_month', 'this_week', 'last_30_days', 'custom'. burndown_from: Start date for custom burndown range (YYYY-MM-DD). burndown_to: End date for custom burndown range (YYYY-MM-DD). page: Page number (default: 1). limit: Rows per page (default: 10). |
| wetrack_get_reports_catalogA | List every report available to the current user's role. Shows dataSource type ('existing', 'generic', 'custom') and default metric/dimension/chartType to use when creating a widget. |
| wetrack_get_my_work_reportB | Current user's My Work report — stat cards, status/priority distributions, and a ticket list scoped to what's assigned to me. Args: project_id: Filter by project UUID. status_id: Filter by status ID. priority_id: Filter by priority ID. date_range: 'this_week', 'this_month', 'this_sprint', or 'custom'. from_date: Start of custom date range (YYYY-MM-DD). to_date: End of custom date range (YYYY-MM-DD). page: Page number. limit: Items per page. |
| wetrack_get_my_sprint_reportA | Current user's My Sprint report — progress, burndown, distributions, and ticket list for the sprint the current user is part of. Args: sprint_id: Sprint UUID (defaults to the user's current active sprint). status_id: Filter by status ID. priority_id: Filter by priority ID. page: Page number. limit: Items per page. |
| wetrack_list_widgetsA | List the current user's report widgets in display order. Each widget has an id, metric, dimension, chartType, isVisible, and orderIndex. |
| wetrack_create_widgetA | Add a report widget to the current user's dashboard. Args: title: Display title shown on the widget card (non-empty). metric: What to measure — one of: 'COUNT_OF_TICKETS', 'COUNT_CREATED_VS_COMPLETED', 'AVG_CYCLE_TIME', 'AVG_RESPONSE_TIME', 'AVG_TICKET_AGE', 'SUM_STORY_POINTS', 'SUM_TIME_SPENT', 'COUNT_BLOCKED'. dimension: Group-by dimension — one of: 'PROJECT', 'SPRINT', 'SPRINT_STATUS', 'ASSIGNEE', 'REPORTER', 'STATUS', 'STATUS_CATEGORY', 'PRIORITY', 'TYPE', 'PARENT', 'DUE_DATE_BUCKET', 'CREATED_DATE', 'RESOLVED_DATE', 'BLOCKED', 'BUG_TYPE'. chart_type: How to render — 'BAR', 'LINE', 'PIE', 'DONUT', 'TABLE', or 'AREA'. catalog_report_id: Optional id from wetrack_get_reports_catalog to link to a catalog entry (e.g. 'status_breakdown'). |
| wetrack_update_widgetA | Update a report widget. At least one field must be provided. Args: widget_id: Widget ID from wetrack_list_widgets. title: New display title (non-empty if provided). metric: New metric — see wetrack_create_widget for valid values. dimension: New dimension — see wetrack_create_widget for valid values. chart_type: Switch chart type — 'BAR', 'LINE', 'PIE', 'DONUT', 'TABLE', 'AREA'. is_visible: Show/hide the widget (True = show, False = hide). |
| wetrack_delete_widgetA | Delete a report widget from the current user's dashboard. Args: widget_id: Widget ID from wetrack_list_widgets. |
| wetrack_get_widget_dataA | Run a widget's metric+dimension query and return chart-ready data. Returns label/value pairs (one per group, up to 50 groups). Args: widget_id: Widget ID from wetrack_list_widgets or wetrack_create_widget. |
| wetrack_reorder_widgetsA | Persist the display order of the current user's report widgets. Args: ordered_ids: ALL widget IDs in the desired top-to-bottom order (not just the one that moved). Get current IDs from wetrack_list_widgets first. Example: ["widget-id-1", "widget-id-2", "widget-id-3"] |
| wetrack_list_notificationsA | Retrieve paginated notifications for the authenticated user. Args: status: Filter by read status — 'all' (default), 'unread', or 'read'. category: Filter by type — 'all' (default), 'comment', or 'update'. project_id: Filter notifications to a specific project UUID. page: Page number (default: 1). limit: Items per page, max 100 (default: 20). |
| wetrack_get_unread_notification_countA | Get the total number of unread notifications for the authenticated user. Useful for showing a badge count. |
| wetrack_mark_notification_readA | Mark a single notification as read. Args: notification_id: Notification ID e.g. 'hist_123' or 'comm_456'. |
| wetrack_mark_all_notifications_readA | Mark ALL notifications as read for the authenticated user at once. |
| wetrack_searchA | Global search across WeTrack — tickets, projects, sprints, and users with weighted relevance ranking. Args: query: Search keyword or ticket code e.g. 'MOB-1', 'authentication', 'login bug'. search_type: Scope — 'all' (default), 'tickets', 'projects', 'sprints', or 'users'. project_id: Scope search to a specific project UUID. limit: Max results per category (1-20, default: 6). |
| wetrack_list_ticket_statusesA | Get the list of ticket statuses. Args: resource: Filter by resource — 'SPRINT', 'TASK', or 'PROJECT'. Omit to return all statuses. include_inactive: Include soft-deleted statuses (default: False). |
| wetrack_get_ticket_statusA | Get a single ticket status by ID. Args: status_id: The status ID. |
| wetrack_create_ticket_statusA | Create a new ticket status. Args: name: Status name e.g. 'In Progress'. category: Lifecycle stage — 'TO_DO', 'IN_PROGRESS', or 'DONE'. resource: Resource type — 'SPRINT', 'TASK', or 'PROJECT'. description: Optional description. color: Hex color e.g. '#3B82F6'. icon: Icon identifier. pauses_sla: Whether this status pauses SLA timer (default: False). |
| wetrack_update_ticket_statusA | Update a ticket status. Name, category, and resource are all required on update. Args: status_id: The status ID. name: Status name. category: 'TO_DO', 'IN_PROGRESS', or 'DONE'. resource: 'SPRINT', 'TASK', or 'PROJECT'. description: Optional description. color: Hex color. icon: Icon identifier. pauses_sla: Whether this status pauses SLA timer. |
| wetrack_delete_ticket_statusA | Soft-delete a ticket status (sets inactive; data is retained). Will fail if active tickets are still using this status. Args: status_id: The status ID to deactivate. |
| wetrack_list_ticket_prioritiesA | Get the list of ticket priorities. Args: resource: Filter by resource — 'SPRINT', 'TASK', or 'PROJECT'. include_inactive: Include soft-deleted priorities (default: False). |
| wetrack_get_ticket_priorityB | Get a single ticket priority by ID. Args: priority_id: The priority ID. |
| wetrack_create_ticket_priorityA | Create a new ticket priority. The code is auto-derived from the name. Args: name: Priority name e.g. 'Blocker' or 'Very High'. priority_type: Severity bucket — 'LOW', 'MEDIUM', 'HIGH', or 'CRITICAL'. resource: Resource type — 'SPRINT', 'TASK', or 'PROJECT'. description: Optional description. color: Hex color. icon: Icon identifier. |
| wetrack_update_ticket_priorityA | Update a ticket priority by ID. Args: priority_id: The priority ID. name: New priority name (required — code is auto-derived from it). priority_type: Severity bucket — 'LOW', 'MEDIUM', 'HIGH', 'CRITICAL'. resource: Resource type — 'SPRINT', 'TASK', 'PROJECT'. description: Optional description. color: Hex color. icon: Icon identifier. |
| wetrack_delete_ticket_priorityA | Soft-delete a ticket priority (sets inactive; data retained). Will fail if active tickets still use this priority. Args: priority_id: The priority ID to deactivate. |
| wetrack_list_ticket_categoriesB | Get all ticket categories. |
| wetrack_get_ticket_categoryB | Get a single ticket category by ID. Args: category_id: The category ID. |
| wetrack_create_ticket_categoryB | Create a new ticket category. Args: name: Category name e.g. 'Hardware'. description: Optional description. color: Hex color. icon: Icon identifier. |
| wetrack_update_ticket_categoryC | Update a ticket category. Args: category_id: The category ID. name: Category name (required). description: Optional description. color: Hex color. icon: Icon identifier. is_active: Active state. |
| wetrack_list_ticket_typesA | Get all ticket types. |
| wetrack_get_ticket_typeA | Get a single ticket type by ID. Args: type_id: The ticket type ID. |
| wetrack_create_ticket_typeA | Create a new ticket type. Args: name: Type name e.g. 'Bug'. description: Optional description. color: Hex color. icon: Icon identifier. |
| wetrack_update_ticket_typeA | Update a ticket type. Args: type_id: The ticket type ID. name: New name (required). description: New description. color: New hex color. icon: New icon identifier. |
| wetrack_list_ticket_productsB | Get all ticket products. |
| wetrack_get_ticket_productB | Get a single ticket product by ID. Args: product_id: The product ID. |
| wetrack_create_ticket_productB | Create a new ticket product. Args: name: Product name e.g. 'VTrack Fleet'. description: Optional description. |
| wetrack_update_ticket_productB | Update a ticket product. Args: product_id: The product ID. name: New name (required). description: New description. is_active: Active state. |
| wetrack_toggle_ticket_productB | Toggle the active/inactive status of a ticket product. Args: product_id: The product ID. |
| wetrack_list_timezonesA | Get all available timezones. Use the returned integer IDs when creating clients or organisations that need a specific timezone. |
| wetrack_list_metadata_fieldsB | Get all custom metadata field definitions. Args: resource_type: Filter by resource — 'TICKET', 'PROJECT', or 'SPRINT'. ticket_type: Filter by ticket type — 'EPIC', 'STORY', 'TASK', 'BUG'. Only meaningful when resource_type is 'TICKET'. is_active: Filter by active status. page: Page number (default: 1). limit: Items per page (default: 10). |
| wetrack_get_metadata_fieldA | Get a single metadata field definition by ID. Args: field_id: Integer ID of the metadata field. |
| wetrack_create_metadata_fieldA | Create a new custom metadata field definition. Args: resource_type: What the field belongs to — 'TICKET', 'PROJECT', or 'SPRINT'. label: Field label e.g. 'Cost Center'. field_type: Field input type — 'TEXT', 'NUMBER', 'DATE', 'BOOLEAN', 'SELECT', or 'MULTI_SELECT'. ticket_type: Required when resource_type is 'TICKET' — 'EPIC', 'STORY', 'TASK', 'BUG'. helper_text: Optional placeholder/helper text shown below the field. is_required: Whether this field is mandatory (default: False). options: Required for SELECT/MULTI_SELECT fields — list of option objects: [{"label": "Engineering", "value": "eng"}, ...] Example: resource_type="TICKET", ticket_type="BUG", label="Environment", field_type="SELECT", options=[{"label": "Production", "value": "prod"}, {"label": "Staging", "value": "staging"}] |
| wetrack_update_metadata_fieldC | Update an existing metadata field definition. Args: field_id: Integer ID of the metadata field. label: New field label (required). helper_text: New helper text. is_required: New required state. options: New options list for SELECT/MULTI_SELECT fields: [{"label": "...", "value": "..."}, ...] |
| wetrack_delete_metadata_fieldA | Delete a metadata field definition. Will fail for system-protected fields. Args: field_id: Integer ID of the metadata field to delete. |
| wetrack_toggle_metadata_field_statusB | Toggle a metadata field's active/inactive status. Args: field_id: Integer ID of the metadata field. |
| wetrack_get_microsoft_signin_urlA | Get the Microsoft OAuth sign-in URL to start the login flow. Returns a URL that the user must open in a browser to complete Microsoft/Azure AD authentication. After login, WeTrack will set a session cookie and redirect to the configured success URL. Workflow:
Note: Microsoft OAuth requires browser interaction and cannot be automated fully through MCP. Use email/password sign-in for non-SSO accounts via wetrack_sign_in. |
| wetrack_set_tokenA | Manually set a JWT token for all subsequent WeTrack API calls. Use this after completing Microsoft OAuth login in a browser to store your token in the MCP server session. Args: token: The JWT Bearer token string from your WeTrack session. After setting this, all tool calls will use Bearer automatically. The token is stored in-memory for this session only. |
| wetrack_get_oauth_callback_infoA | Get information about the Microsoft OAuth callback endpoint. This endpoint is called automatically by Microsoft after login — it resolves the identity to a WeTrack user (auto-registering on first login) and issues a session. Returns documentation about the callback flow rather than calling the endpoint (which requires browser-level interaction with state params). |
| wetrack_get_upload_presign_urlA | Generate an S3 pre-signed upload URL for direct browser-side file uploads. This is step 1 of the two-step upload flow:
Args: file_name: Original file name e.g. 'screenshot.png', 'report.pdf'. file_type: MIME type e.g. 'image/png', 'application/pdf', 'video/mp4'. Returns: presignedUrl: The S3 PUT URL to upload the file to (expires in ~15 min). url: The final public S3 URL to use as the attachment URL in WeTrack. |
| wetrack_get_upload_instructionsA | Get instructions on how to upload files to WeTrack via S3. Since MCP cannot directly stream binary files, this tool explains the complete upload workflow so you can guide the user correctly. |
| wetrack_trigger_sla_checkA | [System/Admin] Trigger the SLA breach notification check. Normally called by an automated scheduler — this tool lets you trigger it manually for testing or on-demand checks. Args: breach_count: Number of SLA breaches to process e.g. 3. auth_key: System auth key (WETRACK_AUTH_KEY from .env). If not provided, reads from WETRACK_AUTH_KEY env var. Note: This requires the WETRACK_AUTH_KEY environment variable to be set, not the regular user JWT. Contact your WeTrack admin for this key. |
| wetrack_trigger_sprint_burndown_snapshotA | [System/Admin] Snapshot today's remaining scope for every active sprint. Normally called by an automated daily scheduler — this tool lets you trigger it manually for testing or to backfill a missed snapshot. Args: auth_key: System auth key (WETRACK_AUTH_KEY from .env). If not provided, reads from WETRACK_AUTH_KEY env var. Note: This requires the WETRACK_AUTH_KEY, not the regular user JWT. |
| wetrack_get_webhook_infoA | Get information about the WeTrack inbound email webhook endpoint. This endpoint is called by Resend (or any Svix-compatible provider) when an inbound email is received and creates a ticket automatically. Returns documentation about the webhook setup rather than calling the endpoint (which requires Svix signature headers from the provider). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| get_server_status | Returns the current WeTrack MCP server status and auth state. |
TDQS
Scored across 110 tools
Multiple reporting/dashboard tools (wetrack_get_reports, wetrack_get_dashboard, wetrack_get_project_reports, wetrack_get_project_overview, wetrack_get_project_stats) have heavily overlapping purposes and outputs, making misselection likely. The client vs organisation tools are also ambiguous since both describe similar organisation entities with nearly identical fields.
Most tools follow a consistent wetrack_verb_noun snake_case pattern, which makes the set readable and predictable. There are minor deviations such as add_ vs create_ verbs, sign_in vs the signin_url naming, and the similar list_organisations/list_clients pair, but the overall convention remains strong.
At 110 tools, the surface is far beyond a manageable MCP tool set and creates a severe agent selection burden. Even though the domain is broad, many tools are niche admin, reporting, and system-trigger utilities that should be consolidated or exposed through fewer composite tools.
The tool surface is broad and covers most core lifecycle operations for projects, tickets, sprints, users, configurations, files, notifications, and reports. Notable gaps include no ticket deletion, no user deactivation/deletion, and no client/organisation removal, but these are workable gaps rather than fundamental dead ends.