MCP Tools Reference
Complete reference for all Kemon MCP tools — parameters, scopes, and responses.
All tools are available through the MCP server at mcp.kemon.io. Each tool requires specific API key scopes. Tools that accept an identifier parameter support both human-readable identifiers (e.g. ENG-123) and raw ticket IDs.
Ticket tools
list_tickets
List tickets in the workspace with optional filtering.
Scope: tickets:read
Prop
Type
[
{
"id": "01HQ3K5P7Y...",
"identifier": "ENG-42",
"title": "Fix login redirect on mobile Safari",
"status": "in_progress",
"priority": "high",
"teamId": "01HQ3K5P7Y...",
"assignees": ["01HQ3K5P7Y..."],
"labels": ["01HQ3K5P7Y..."],
"dueDate": "2026-04-01",
"createdAt": "2026-03-15T10:30:00Z"
}
]get_ticket
Get full details for a single ticket.
Scope: tickets:read
Prop
Type
{
"id": "01HQ3K5P7Y...",
"identifier": "ENG-42",
"title": "Fix login redirect on mobile Safari",
"description": "Users on iOS Safari are not redirected after OAuth login.",
"status": "in_progress",
"priority": "high",
"teamId": "01HQ3K5P7Y...",
"teamIdentifier": "ENG",
"parentId": null,
"parentIdentifier": null,
"assignees": ["01HQ3K5P7Y..."],
"labels": ["01HQ3K5P7Y..."],
"dueDate": "2026-04-01",
"projectId": "01HQ3K5P7Y...",
"createdAt": "2026-03-15T10:30:00Z",
"updatedAt": "2026-03-16T14:22:00Z"
}create_ticket
Create a new ticket in the workspace.
Scope: tickets:write
Prop
Type
{
"id": "01HQ3K5P7Y...",
"identifier": "ENG-135",
"title": "Add dark mode to settings page",
"status": "backlog",
"priority": "medium"
}update_ticket
Update an existing ticket. Only include fields you want to change.
Scope: tickets:write
Prop
Type
Pass null for assigneeUserId, projectId, or dueDate to clear the current value.
{
"id": "01HQ3K5P7Y...",
"identifier": "ENG-42",
"title": "Fix login redirect on mobile Safari",
"status": "done",
"priority": "high"
}Agent hints
When status is set to done, the response includes an _agentHint field with a verification
checklist — AI agents are instructed to add a comment, verify the change, and upload a screenshot
before considering the ticket complete. When status is set to blocked, the _agentHint
requires a comment explaining the blocker. These hints are informational and intended for AI agent
workflows.
create_comment
Add a comment to a ticket.
Scope: tickets:write
Prop
Type
{
"commentId": "01HQ3K5P7Y...",
"ticketId": "01HQ3K5P7Y...",
"identifier": "ENG-42",
"text": "Fixed by updating the OAuth callback URL handling.",
"createdAt": "2026-03-17T09:00:00Z"
}audit_codebase
Audit a codebase for issues and batch-create tickets for each finding. Use list_teams first to get valid team IDs.
Scope: tickets:write
The findings parameter is an array of objects (max 25). Each finding has the following shape:
{
"findings": [
{
"title": "SQL injection in search endpoint",
"description": "The /api/search handler concatenates user input directly into the SQL query string. Use parameterized queries instead.",
"teamId": "01HQ3K5P7Y...",
"category": "security",
"priority": "urgent",
"files": [
{
"path": "src/api/search.ts",
"startLine": 42,
"endLine": 48
}
]
}
]
}| Field | Type | Description |
|---|---|---|
title | string | Short title describing the issue (1-500 characters) |
description | string | Detailed explanation of the issue, why it matters, and how to fix it (plain text, 1-5000 characters) |
teamId | string | Team ID — use list_teams to get valid IDs |
category | string | security, maintainability, inconsistency, performance, or reliability |
priority | string | no priority, low, medium, high, or urgent |
files | array | Affected files — each with path (required), startLine (optional), endLine (optional) |
A single call accepts up to 25 findings. Split larger audits across multiple calls.
{
"summary": "Created 2 audit tickets",
"tickets": [
{
"id": "01HQ3K5P7Y...",
"identifier": "ENG-136",
"title": "SQL injection in search endpoint",
"status": "backlog",
"priority": "urgent",
"category": "security"
}
]
}File attachments
Uploading a file to a ticket is a three-step process:
Get a presigned upload URL
Call create_upload_url to reserve an attachment slot and get a presigned S3 URL.
Scope: tickets:write
Prop
Type
{
"attachmentId": "01HQ3K5P7Y...",
"uploadUrl": "https://s3.amazonaws.com/...",
"fields": { "key": "...", "policy": "...", "signature": "..." },
"publicUrl": "https://cdn.kemon.io/..."
}Upload the file
Send an HTTP POST to the returned uploadUrl with the fields as multipart form data, followed by the file content. This step happens outside of MCP.
Confirm the upload
Call confirm_upload to finalize the attachment.
Scope: tickets:write
Prop
Type
{
"attachmentId": "01HQ3K5P7Y...",
"fileName": "screenshot.png",
"contentType": "image/png",
"publicUrl": "https://cdn.kemon.io/..."
}Lookup tools
list_labels
List all labels in the workspace.
Scope: labels:read
No parameters required.
[
{
"id": "01HQ3K5P7Y...",
"name": "bug",
"color": "#ef4444"
}
]list_teams
List teams in the workspace.
Scope: teams:read
Prop
Type
[
{
"id": "01HQ3K5P7Y...",
"name": "Engineering",
"identifier": "ENG",
"icon": "code",
"isPrivate": false,
"createdAt": "2026-01-10T08:00:00Z"
}
]list_projects
List projects in the workspace.
Scope: projects:read
Prop
Type
[
{
"id": "01HQ3K5P7Y...",
"name": "Mobile App v2",
"status": "in_progress",
"priority": "high",
"health": "on_track",
"teamId": "01HQ3K5P7Y...",
"startDate": "2026-01-15",
"targetDate": "2026-06-30",
"createdAt": "2026-01-10T08:00:00Z"
}
]list_members
List members in the workspace.
Scope: members:read
Prop
Type
[
{
"memberId": "01HQ3K5P7Y...",
"userId": "01HQ3K5P7Y...",
"role": "admin",
"name": "Jane Smith",
"email": "jane@example.com",
"image": "https://cdn.kemon.io/avatars/...",
"createdAt": "2026-01-10T08:00:00Z"
}
]Workflow examples
These examples show how to combine tools to accomplish common tasks. You can use natural language prompts — your AI assistant will determine which tools to call.
Create a ticket from your IDE
"Create a high-priority bug in the Engineering team to fix the login redirect, assign it to Jane, and label it as bug"
Your assistant will:
- Call
list_teamsto find the Engineering team ID - Call
list_membersto find Jane's user ID - Call
list_labelsto find the "bug" label ID - Call
create_ticketwith the gathered IDs, priority set tohigh, and the title from your prompt
Triage your backlog
"Show me all backlog tickets and help me prioritize them"
Your assistant will:
- Call
list_ticketswithstatus: "backlog"to fetch unstarted work - Present the tickets for your review
- Call
update_ticketfor each ticket you want to re-prioritize or move totodo
Document completed work
"Mark ENG-42 as done and add a comment explaining the OAuth callback fix"
Your assistant will:
- Call
update_ticketwithidentifier: "ENG-42"andstatus: "done" - Call
create_commentwith a summary of the fix
Audit a codebase and file tickets
"Review this codebase for security and performance issues and create tickets for each finding"
Your assistant will:
- Call
list_teamsto find the target team ID - Analyze the codebase for issues
- Call
audit_codebasewith up to 25 categorized and prioritized findings