Contents
- Why Backlog MCP — the Japan market context
- Reading the KanseiLink measured data
- Choosing between the two auth methods
- Pitfall 1: the x-www-form-urlencoded wall
- Pitfall 2: pagination without total count
- Pitfall 3: you must ask for the space name
- March 2026 new feature: bulk update tool
- Agent implementation recipes
- FAQ
Why Backlog MCP — the Japan market context
Backlog is a project and issue management SaaS by Nulab, widely used by Japanese engineering teams for over a decade. As of 2026, while Jira and Linear dominate the English-speaking world, Backlog retains domestic share thanks to a Japanese-optimized issue management UX, integrated Gantt charts and Wiki, and a low adoption barrier suited to mid-market organizations.
Backlog's release of an official Model Context Protocol server under MIT license in 2026 is a symbolic moment for Japanese SaaS in the agent era. The official repository github.com/nulab/backlog-mcp-server was last updated on April 17, 2026, and exposes 42+ tools across 7 functional toolsets that MCP clients like Claude Desktop, Cline, and Cursor can drive.
An MCP server that is simultaneously official, MIT-licensed, and feature-complete (42+ tools) is still rare among Japanese SaaS in 2026. Backlog clears all three bars at once — a meaningful advantage for buyers and developers building agentic workflows.
Reading the KanseiLink measured data
KanseiLink aggregates agent self-reported data across 225+ services. The Backlog MCP get_insights snapshot (April 2026) is below.
Backlog MCP Key Metrics (KanseiLink, April 2026)
(n=91)
(trust 0.9)
(api 6 / search_miss 2 / auth 1)
The standout figure is 128ms average latency — faster than freee MCP (216ms), Slack MCP (163ms), and Notion MCP (216ms) in the KanseiLink dataset. Zero timeout errors are recorded, which makes Backlog a strong fit for long-running agent loops.
The most common error is api_error (6 cases) — transient 5xx/4xx that retries can handle. Next is search_miss (2 cases), all resolved with the verified workaround "use category filters or Japanese keywords." A single auth_error was fixed by regenerating the API key from the Backlog admin panel and retrying.
| Metric | Value | What it means |
|---|---|---|
| Reports | 91 | Statistically meaningful sample |
| Success rate | 90% | AAA-tier among major MCPs |
| Avg latency | 128ms | Among the fastest major MCPs |
| Timeout errors | 0 | Low giveup-trigger risk in long tasks |
| auth_error workaround | Established | "Regenerate the API key" recovers |
| search_miss workaround | Established (verified) | "Category filter or Japanese keywords" |
Choosing between the two auth methods
Backlog supports two authentication methods. The choice is the first design fork in any agent integration.
Method A: API key (?apiKey= query parameter)
Generate a key under Personal Settings → API and append ?apiKey={key} to every request URL. No headers, no OAuth refresh flow, minimal dependencies. For solo developers, internal agents, and single-user setups this is the simplest path.
GET /api/v2/issues?projectId[]=1&statusId[]=1&apiKey=YOUR_KEY HTTP/1.1
Host: myspace.backlog.com
Method B: OAuth 2.0
Register an app at developer.nulab.com, run the Authorization Code Flow, and send the bearer token in the Authorization header. Required for multi-tenant SaaS where each user authenticates with their own Backlog account, and for any operation that demands scheduled token rotation.
Because the API key is sent as a query parameter, it can leak into server logs, proxy logs, and browser history. In agent code, always mask the apiKey value in URL log output. HTTPS is assumed, but plaintext logs at internal reverse proxies are a real risk.
Pitfall 1: the x-www-form-urlencoded wall
The Backlog REST API requires POST/PATCH bodies in application/x-www-form-urlencoded, not application/json. This is unusual for a modern 2026 API and clashes with the fetch(url, {body: JSON.stringify(...)}) pattern that agents tend to generate by default.
# ❌ Bad: JSON body returns 400
POST /api/v2/issues?apiKey=KEY HTTP/1.1
Content-Type: application/json
{"projectId": 1, "summary": "Bug fix", "issueTypeId": 1, "priorityId": 3}
# ✅ Good: x-www-form-urlencoded
POST /api/v2/issues?apiKey=KEY HTTP/1.1
Content-Type: application/x-www-form-urlencoded
projectId=1&summary=Bug%20fix&issueTypeId=1&priorityId=3
Array parameters use bracket notation: projectId[]=1&projectId[]=2. The Nulab official backlog-mcp-server handles encoding internally; only roll your own when you write fetch directly or implement in another language.
Use the official Nulab backlog-mcp-server. Run npx @nulab/backlog-mcp-server and add it to your Claude Desktop / Cline / Cursor mcpServers config. The urlencoded problem is absorbed inside the server.
Pitfall 2: pagination without total count
Backlog uses offset + count (max 100) pagination, but responses do not include a total_count. The only way for an agent to know "how many more remain" is to loop until an empty array is returned.
For long-running projects with thousands or tens of thousands of issues, full retrieval needs roughly 100 calls (offset=0,100,200,...). At 128ms per call, that's ~12.8 seconds — close to common agent timeout thresholds. Always combine filters (projectId, statusId, updatedSince) to narrow the working set.
Pitfall 3: you must ask for the space name
Backlog is multi-tenant: the base URL takes the form https://{space}.backlog.com/api/v2/. Agents must explicitly ask the user for the Backlog space name before any call. Guessing risks connecting to a different company's Backlog space.
# Claude Desktop config example
{
"mcpServers": {
"backlog": {
"command": "npx",
"args": ["-y", "@nulab/backlog-mcp-server"],
"env": {
"BACKLOG_BASE_URL": "https://myspace.backlog.com",
"BACKLOG_API_KEY": "YOUR_API_KEY_HERE"
}
}
}
}
March 2026 new feature: bulk update tool
On March 25, 2026, Nulab added a bulk issue update tool to backlog-mcp-server. Previously each issue required a separate PATCH /issues/{key} call; the new tool updates status, assignee, and due date across many issues in one operation.
Typical workflows enabled:
- Close all "Done" issues at sprint end in one go
- Hand over open issues from a leaving owner to a successor
- Mark overdue issues as "Late" in batch
- Apply category tags during taxonomy cleanups
Fewer agent calls means lower token usage and shorter end-to-end latency — three benefits compounding. With 128ms average latency, this enables near-real-time automation of routine project-management ops.
On March 8, 2026, Nulab also shipped a Wiki markdown table rendering fix, raising the reliability of Wiki tools. Backlog appears to be actively maintaining its MCP server.
Agent implementation recipes
Five practical recipes distilled from KanseiLink data and the official documentation.
- Recipe 1: Use the official MCP server as-is.
npx -y @nulab/backlog-mcp-serverconnects instantly to Claude Desktop, Cline, and Cursor. urlencoded conversion, array brackets, and apiKey injection are all handled internally. - Recipe 2: Always confirm the space name first. At startup, fix
BACKLOG_BASE_URLfrom environment variables or by asking the user. Never guess. - Recipe 3: Implement a search_miss fallback. The verified workaround in KanseiLink data: when a search returns zero results, retry with category filters or Japanese keywords.
- Recipe 4: Avoid full retrieval; require updatedSince + filters. Since total_count is not returned, narrow scope by time + project + status. Forbid loops over 100 calls in your design.
- Recipe 5: Prefer the bulk update tool. Replace repeated single PATCHes with one bulk call. Keep an "API key regeneration" fallback ready for auth_error.
FAQ
Should I use API key or OAuth for Backlog MCP?
For solo developers and single-user internal agents, the API key method is simplest: generate a key from Backlog Personal Settings and append ?apiKey={key} to every request URL. For multi-tenant SaaS where users authenticate with their own Backlog account, or when token rotation is required, OAuth 2.0 (registered at developer.nulab.com) is mandatory.
I keep getting 400 errors. What's wrong?
The most common cause is sending POST/PATCH bodies as application/json. The Backlog REST API requires application/x-www-form-urlencoded. Array parameters use bracket notation: projectId[]=1&projectId[]=2. The Nulab official MCP server handles this internally.
Backlog MCP is rated AAA — what's the basis?
(1) Official Nulab MCP server under MIT license, (2) 91 measured reports with 90% success, (3) 128ms average latency, (4) zero timeout errors, (5) auth_error has an established API-key-regeneration workaround, (6) 42+ tools across 7 functional areas (issues, wiki, git, PR, files, etc.).
What is the bulk update tool added on March 25, 2026?
A bulk issue update tool added to Nulab's official backlog-mcp-server. It updates status, assignee, due date, etc. across many issues in one call. Useful for sprint-end closure, assignee handover, and batch tagging. With 128ms latency, near-real-time automation becomes practical.
Does the Backlog API have published rate limits?
Backlog documentation states "varies by plan; no strict rate limit for API key access, but heavy use may be throttled." When making large volumes of calls in a short window, implement exponential backoff and slow down on 429 responses.
Numbers in this article are based on KanseiLink MCP get_insights data as of April 2026: Backlog MCP (n=91, success_rate 0.90, avg_latency 128ms, trust_score 0.9, AAA grade). Error breakdown: api_error 6, search_miss 2 (workaround verified), auth_error 1 (workaround unverified). Backlog API specifics (auth methods, x-www-form-urlencoded requirement, pagination, rate limits) reference developer.nulab.com documentation as of April 2026, and the Nulab official repository github.com/nulab/backlog-mcp-server (last updated 2026-04-17). The bulk update tool (2026-03-25) and Wiki markdown fix (2026-03-08) are based on KanseiLink internal change-log entries. Specifications may change without notice; verify against the latest official documentation before production use.