Skip to main content
Glama
fleagne

Backlog MCP Server

by fleagne

backlog_get_issues

Retrieve and filter Backlog issues by project, assignee, status, and more using the Backlog Issues API. Supports pagination, sorting, and date-based searches.

Instructions

Performs list issue get using the Backlog Issues API. Supports pagination, content filtering. Maximum 20 results per request, with offset for pagination.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
assigneeIdNoAssignee ids
countNoNumber of results (1-100, default 20)
createdSinceNoStart date of created date (YYYY-MM-DD format)
createdUntilNoEnd date of created date (YYYY-MM-DD format)
keywordNoKeyword for searching
offsetNoOffset for pagination
orderNoSort orderdesc
priorityIdNoPriority ids
projectIdNoProject ids
sortNoAttribute name for sorting
statusIdNoStatus ids

Implementation Reference

  • The handleGetIssues function is the core handler for the 'backlog_get_issues' MCP tool. It parses input arguments using IssuesParamsSchema, calls issueService.getIssues to fetch data, formats the response as MCP content blocks, and handles validation and general errors appropriately.
    const handleGetIssues: ToolHandler = async (args) => {
    	try {
    		try {
    			const validatedParams = IssuesParamsSchema.parse(args);
    
    			const text = await issueService.getIssues(validatedParams);
    
    			return {
    				content: [
    					{
    						type: "text",
    						text: `Results for your query:\n${text}`,
    					},
    				],
    				isError: false,
    			};
    		} catch (validationError) {
    			throw new ValidationError(
    				`Invalid parameters: ${validationError instanceof Error ? validationError.message : String(validationError)}`,
    			);
    		}
    	} catch (error) {
    		return {
    			content: [
    				{
    					type: "text",
    					text: `Error: ${formatError(error)}`,
    				},
    			],
    			isError: true,
    		};
    	}
    };
  • The toolHandlers export maps the tool name 'backlog_get_issues' to its handler function handleGetIssues, serving as the registration point for the MCP tool.
    export const toolHandlers: Record<ToolName, ToolHandler> = {
    	backlog_get_projects: handleGetProjects,
    	backlog_get_project: handleGetProject,
    	backlog_get_issues: handleGetIssues,
    	backlog_get_issue: handleGetIssue,
    	backlog_add_issue: handleAddIssue,
    	backlog_update_issue: handleUpdateIssue,
    	backlog_delete_issue: handleDeleteIssue,
    	backlog_get_wikis: handleGetWikis,
    	backlog_get_wiki: handleGetWiki,
    	backlog_add_wiki: handleAddWiki,
    	backlog_update_wiki: handleUpdateWiki,
    	backlog_delete_wiki: handleDeleteWiki,
    };
  • Defines the MCP Tool object for 'backlog_get_issues', including its name, description, and inputSchema derived via convertZodToJsonSchema from the Zod IssuesParamsSchema.
    export const ISSUES_TOOL: Tool = createTool(
    	"backlog_get_issues",
    	"Performs list issue get using the Backlog Issues API. " +
    		"Supports pagination, content filtering. " +
    		"Maximum 20 results per request, with offset for pagination.",
    	IssuesParamsSchema,
    );
  • Zod schema definition for input parameters of the 'backlog_get_issues' tool, composed from base parameter schemas including pagination, sorting, filtering, dates, entity IDs, conditions, and keywords.
    export const IssuesParamsSchema = BaseParamsSchema.merge(DateRangeSchema)
    	.merge(EntityIdsSchema)
    	.merge(ConditionSchema)
    	.merge(SortingSchema)
    	.merge(KeywordSchema);
  • Custom hardcoded JSON schema for IssuesParamsSchema input validation in the MCP tool definition, providing detailed properties for pagination, sorting, filtering, and more.
    if (isIssuesParamsSchema) {
    	return {
    		type: "object" as const,
    		properties: {
    			offset: {
    				type: "number",
    				description: "Offset for pagination",
    				default: 0,
    			},
    			count: {
    				type: "number",
    				description: "Number of results (1-100, default 20)",
    				default: 20,
    				minimum: 1,
    				maximum: 100,
    			},
    			keyword: {
    				type: "string",
    				description: "Keyword for searching",
    			},
    			sort: {
    				type: "string",
    				description: "Attribute name for sorting",
    				enum: [
    					"issueType",
    					"category",
    					"version",
    					"milestone",
    					"summary",
    					"status",
    					"priority",
    					"attachment",
    					"sharedFile",
    					"created",
    					"createdUser",
    					"updated",
    					"updatedUser",
    					"assignee",
    					"startDate",
    					"dueDate",
    					"estimatedHours",
    					"actualHours",
    					"childIssue",
    				],
    			},
    			order: {
    				type: "string",
    				description: "Sort order",
    				enum: ["asc", "desc"],
    				default: "desc",
    			},
    			statusId: {
    				type: "array",
    				description: "Status ids",
    				items: {
    					type: "number",
    				},
    			},
    			assigneeId: {
    				type: "array",
    				description: "Assignee ids",
    				items: {
    					type: "number",
    				},
    			},
    			createdSince: {
    				type: "string",
    				description: "Start date of created date (YYYY-MM-DD format)",
    			},
    			createdUntil: {
    				type: "string",
    				description: "End date of created date (YYYY-MM-DD format)",
    			},
    			priorityId: {
    				type: "array",
    				description: "Priority ids",
    				items: {
    					type: "number",
    				},
    			},
    			projectId: {
    				type: "array",
    				description: "Project ids",
    				items: {
    					type: "number",
    				},
    			},
    		},
    	};
    }

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv1.0.0

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description mentions pagination (max 20, offset) but contradicts the schema which allows up to 100 results. It does not disclose rate limits, authentication needs, or what callers should expect regarding data returned. With no annotations, the description carries the burden but fails to fully inform.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief (two sentences) and avoids fluff, but the first sentence is poorly structured ('Performs list issue get'). It is acceptable but not polished.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 11 parameters and no output schema, the description lacks details on return values, error handling, and how filters interact. The inaccurate count statement further undermines completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. However, the description adds no meaning beyond the schema, and it introduces a factual error by stating max 20 results while the schema says max 100. This misleading information reduces credibility and does not contribute positively.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states it performs a list issue operation, which clearly indicates retrieving multiple issues. It is implicitly differentiated from singular tools like backlog_get_issue. However, the phrasing 'list issue get' is awkward and could be more straightforward.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus siblings like backlog_get_issue (for a single issue) or other tools. There is no mention of when not to use it or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Related Tools