
Taiga Mcp Server
io.github.xHisusxPublished by GitHub account xHisusxv0.5.0Updated Oct 29, 2026
Read and manage your own Taiga projects: items, statuses, assignees, sprints, comments
Overview
MCP server that connects an assistant to a Taiga project tracker to read and manage stories, tasks, issues, epics, sprints and comments.
- What you can do
- Read and manage project items: user stories, tasks, issues and epics, including creating, editing, assigning and estimating them
- Move items between statuses, plan sprints and add comments, addressing statuses, members and sprints by name
- Summarize a period of work with a timeline call that reports status moves, closures, comments, sprint moves and attachments per card
- Optionally delete items, but only when deletion is explicitly enabled
- When to use it
- Useful when a team tracks work in Taiga and wants an assistant to answer questions about what is assigned to them or what changed in a period, or to create and update stories, tasks and issues without leaving the chat.
- Requirements
- Runs locally over stdio, typically via npx, on Node.js 18 or newer. Needs TAIGA_URL (the instance root without /api/v1, for example the Taiga Cloud API host) and either TAIGA_APP_TOKEN or a TAIGA_USERNAME with TAIGA_PASSWORD. Optional: TAIGA_PROJECT for a default project, TAIGA_MCP_READ_ONLY and TAIGA_MCP_ALLOW_DELETE toggles. Network access to the Taiga instance.
Installation
In SourceWeft
- Open Taiga Mcp Server in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
taiga-api-client
[npm version] [npm downloads] [bundle size] [types] [license] [CI] [GitHub stars]
🇬🇧 English version — you are here · 🇷🇺 Русская версия
A TypeScript client for the Taiga REST API. Zero runtime dependencies, dual ESM + CJS, runs on Node ≥18, Bun ≥1.0 and any environment with a global fetch.
- 🔐 Bearer authentication with automatic token refresh and deduplication of concurrent refreshes
- 📦 Fully typed: types for every resource, payload and parameter
- 🚫 Zero runtime dependencies
- 🔄 Async iterators for pagination
- ⚠️ Typed errors (
TaigaApiError,TaigaAuthError,TaigaRateLimitError,TaigaNetworkError) - 🚀 Dual ESM + CJS build with
.d.ts/.d.ctstype maps
Installation
Quick start
🤖 MCP server: Taiga for AI agents
This repository also ships taiga-api-mcp-server — a Model Context Protocol server built on this client. Point an MCP client (Claude Code, Claude Desktop, Cursor, …) at your Taiga account and it can read what is assigned to you, move items between statuses, create user stories, tasks, issues and epics, assign people, estimate, comment and plan sprints — with your own permissions and nothing more.
Statuses, members and sprints are addressed by name; the server resolves them against the project's own catalogs, so an agent never has to guess a numeric ID.
It also answers "what did we do last week" in one call: taiga_activity walks the project
timeline and returns, per card touched in the window, what actually happened to it — status
moves, closures (including the ones entered days later), comments, sprint moves, attachments.
Taiga's list endpoints have no date filters, so this is the only way to get a period of work.
Whether a story is finished comes from its tasks (tasks_done of tasks_total) and whether
it was closed from the project's own statuses — the dates and the closed flag are filled in by
hand, and often not at all. Both are answered twice over, as of today and as of the end of the
window, because a card moved to Done three days later is not last week's work.
📖 Setup, tool reference and examples: mcp/README.md
💡 Looking up catalog IDs? Use filters_data
Most write operations need numeric IDs of project-specific catalog values (status, type, severity, priority, assignee, …). Don't fetch each catalog separately — every resource exposes a filters_data method that returns all of them in one request, scoped to the project.
📖 Read the full guide: docs/filters-data.md — caching, available endpoints per resource, when it is not enough.
Creating the client
Minimum:
baseUrl is the only required option. Everything else is optional.
Full example:
TaigaClientOptions
Authentication
Three modes are supported:
Automatic token refresh
With autoRefresh: true (the default), the client transparently intercepts 401 responses, calls POST /auth/refresh, and retries the original request once. Concurrent 401s are deduplicated — /auth/refresh is called exactly once even if 10 requests fail simultaneously. If the refresh itself fails, tokens are cleared and a TaigaAuthError is thrown.
Persisting tokens across process restarts
onTokenChange is invoked:
- after
client.auth.login(...)— with the new token pair; - after a successful auto-refresh — with the new pair;
- after
client.auth.logout()— withnull.
The returned Promise is awaited before the request is retried, so your persistence is guaranteed to complete before the next request goes out.
Resources and methods
Every resource extends BaseResource, which provides standard CRUD. Specific resources add their own methods on top.
BaseResource<T> — common CRUD
client.auth — authentication
client.users — users
Base CRUD plus:
⚠️
users.create()intentionally throws — registration uses dedicated endpoints (out of scope in v0.1).
client.projects — projects
Base CRUD plus:
client.memberships — project memberships
Base CRUD plus:
client.userStories — user stories
Base CRUD plus:
client.tasks — tasks
Base CRUD plus:
client.issues — issues
Base CRUD plus:
client.epics — epics
Base CRUD plus:
ℹ️ Epics must be enabled on the project (
is_epics_activated: true) for these endpoints to work.
client.milestones — sprints
Base CRUD plus:
Pagination
list() always returns the first page of the response. There are three ways to iterate the full set:
⚠️
disablePaginationsends thex-disable-pagination: Trueheader. Use it only on small collections — for large ones Taiga may respond with an error or time out.
Errors
Every error inherits from the abstract TaigaError:
Optimistic Concurrency Control (OCC)
Taiga prevents lost updates between concurrent users via a version field. When calling patch(), pass the version you received with the object — if someone updated it first, Taiga responds with 400 / 412 and you learn about the conflict.
Low-level access
For endpoints that are not yet wrapped as resources, use client.http directly:
The available methods are get, post, put, patch, delete. They all accept the same RequestOptions: { query, body, headers, signal, disablePagination, skipAuth }.
Coverage
Implemented:
- Auth: login, refresh, logout, application token, session restore, auto-refresh with deduplication
- Users: profile, list, update, change password, stats
- Projects: CRUD, by_slug, stats, modules config
- Memberships: CRUD, bulk_create, resend invitation
- User Stories: CRUD, bulk_create, bulk_update_order for every board, filters_data
- Tasks: CRUD, bulk_create, filters_data
- Issues: CRUD, filters_data, voters, watchers, upvote/downvote, watch/unwatch
- Milestones: CRUD, stats
- Epics (new in v0.2): CRUD, bulk_create, filters_data, related_userstories (list/add/remove), voters, watchers, upvote/downvote, watch/unwatch
Not implemented yet (planned for upcoming releases): wiki, webhooks, attachments, custom attributes, history/comments, importers (Trello/Jira/GitHub), project templates, GitHub OAuth flow.
If the endpoint you need is not covered, fall back to client.http and/or open an issue.
Compatibility
License
Source: README.md at commit 8546124
Tools
0Version history
2- v0.5.0LatestOct 29, 2026
- v0.1.1Oct 21, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts