Taiga MCP Bridge

Taiga MCP Bridge

A protocol bridge that connects AI systems to Taiga project management platform, enabling AI tools to create and manage projects, epics, user stories, tasks, issues, and sprints.

talhaorak

Developer Tools
Visit Server

Tools

login

Logs into a Taiga instance using username/password and returns a session_id for subsequent authenticated calls.

list_projects

Lists projects accessible to the user associated with the provided session_id.

list_all_projects

Lists all projects visible to the user (requires admin privileges for full list). Uses the provided session_id.

get_project

Gets detailed information about a specific project by its ID.

get_project_by_slug

Gets detailed information about a specific project by its slug.

update_project

Updates details of an existing project.

delete_project

Deletes a project by its ID. This is irreversible.

get_project_roles

Lists the available roles within a specific project.

list_user_stories

Lists user stories within a specific project, optionally filtered.

create_user_story

Creates a new user story within a project.

get_user_story

Gets detailed information about a specific user story by its ID.

get_user_story_by_ref

Gets detailed information about a specific user story by its reference number within a project.

update_user_story

Updates details of an existing user story.

delete_user_story

Deletes a user story by its ID.

assign_user_story_to_user

Assigns a specific user story to a specific user.

unassign_user_story_from_user

Unassigns a specific user story (sets assigned user to null).

get_user_story_statuses

Lists the available statuses for user stories within a specific project.

list_tasks

Lists tasks within a specific project, optionally filtered.

create_task

Creates a new task within a project.

get_task

Gets detailed information about a specific task by its ID.

get_task_by_ref

Gets detailed information about a specific task by its reference number within a project.

update_task

Updates details of an existing task.

delete_task

Deletes a task by its ID.

assign_task_to_user

Assigns a specific task to a specific user.

unassign_task_from_user

Unassigns a specific task (sets assigned user to null).

get_task_statuses

Lists the available statuses for tasks within a specific project.

list_issues

Lists issues within a specific project, optionally filtered.

create_issue

Creates a new issue within a project.

get_issue

Gets detailed information about a specific issue by its ID.

get_issue_by_ref

Gets detailed information about a specific issue by its reference number within a project.

update_issue

Updates details of an existing issue.

delete_issue

Deletes an issue by its ID.

get_project_members

Lists members of a specific project.

assign_issue_to_user

Assigns a specific issue to a specific user.

unassign_issue_from_user

Unassigns a specific issue (sets assigned user to null).

get_issue_statuses

Lists the available statuses for issues within a specific project.

get_issue_priorities

Lists the available priorities for issues within a specific project.

get_issue_severities

Lists the available severities for issues within a specific project.

get_issue_types

Lists the available types for issues within a specific project.

list_epics

Lists epics within a specific project, optionally filtered.

create_epic

Creates a new epic within a project.

get_epic

Gets detailed information about a specific epic by its ID.

get_epic_by_ref

Gets detailed information about a specific epic by its reference number within a project.

update_epic

Updates details of an existing epic.

delete_epic

Deletes an epic by its ID.

assign_epic_to_user

Assigns a specific epic to a specific user.

unassign_epic_from_user

Unassigns a specific epic (sets assigned user to null).

get_epic_statuses

Lists the available statuses for epics within a specific project.

list_milestones

Lists milestones (sprints) within a specific project.

create_milestone

Creates a new milestone (sprint) within a project.

get_milestone

Gets detailed information about a specific milestone by its ID.

update_milestone

Updates details of an existing milestone.

delete_milestone

Deletes a milestone by its ID.

get_milestone_stats

Gets statistics (total points, completed points, etc.) for a specific milestone.

invite_project_user

Invites a user to a project by email with a specific role.

list_wiki_pages

Lists wiki pages within a specific project.

get_wiki_page

Gets a specific wiki page by its ID.

get_wiki_page_by_slug

Gets a specific wiki page by its slug within a project.

logout

Invalidates the current session_id.

session_status

Checks if the provided session_id is currently active and valid.

README

<p align="center"> <picture> <img src="https://taiga.io/media/images/favicon.width-44.png"> </picture> </p>

Taiga MCP Bridge

Python 3.10+ License: MIT

Overview

The Taiga MCP Bridge is a powerful integration layer that connects Taiga project management platform with the Model Context Protocol (MCP), enabling AI tools and workflows to interact seamlessly with Taiga's resources.

This bridge provides a comprehensive set of tools and resources for AI agents to:

  • Create and manage projects, epics, user stories, tasks, and issues in Taiga
  • Track sprints and milestones
  • Assign and update work items
  • Query detailed information about project artifacts
  • Manage project members and permissions

By using the MCP standard, this bridge allows AI systems to maintain contextual awareness about project state and perform complex project management tasks programmatically.

Features

Comprehensive Resource Support

The bridge supports the following Taiga resources with complete CRUD operations:

  • Projects: Create, update, and manage project settings and metadata
  • Epics: Manage large features that span multiple sprints
  • User Stories: Handle detailed requirements and acceptance criteria
  • Tasks: Track smaller units of work within user stories
  • Issues: Manage bugs, questions, and enhancement requests
  • Sprints (Milestones): Plan and track work in time-boxed intervals

Installation

This project uses uv for fast, reliable Python package management.

Prerequisites

  • Python 3.10 or higher
  • uv package manager

Basic Installation

# Clone the repository
git clone https://github.com/your-org/pyTaigaMCP.git
cd pyTaigaMCP

# Install dependencies
./install.sh

Development Installation

For development (includes testing and code quality tools):

./install.sh --dev

Manual Installation

If you prefer to install manually:

# Production dependencies only
uv pip install -e .

# With development dependencies
uv pip install -e ".[dev]"

Configuration

The bridge can be configured through environment variables or a .env file:

Environment Variable Description Default
TAIGA_API_URL Base URL for the Taiga API http://localhost:9000
SESSION_EXPIRY Session expiration time in seconds 28800 (8 hours)
TAIGA_TRANSPORT Transport mode (stdio or sse) stdio
REQUEST_TIMEOUT API request timeout in seconds 30
MAX_CONNECTIONS Maximum number of HTTP connections 10
MAX_KEEPALIVE_CONNECTIONS Max keepalive connections 5
RATE_LIMIT_REQUESTS Max requests per minute 100
LOG_LEVEL Logging level INFO
LOG_FILE Path to log file taiga_mcp.log

Create a .env file in the project root to set these values:

TAIGA_API_URL=https://api.taiga.io/api/v1/
TAIGA_TRANSPORT=sse
LOG_LEVEL=DEBUG

Usage

With stdio mode

Paste the following json in your Claude App's or Cursor's mcp settings section:

{
    "mcpServers": {
        "taigaApi": {
            "command": "uv",
            "args": [
                "--directory",
                "<path to local pyTaigaMCP folder>",
                "run",
                "src/server.py"
            ],
            "env": {
                "TAIGA_TRANSPORT": "<stdio|sse>",                
                "TAIGA_API_URL": "<Taiga API Url (ex: http://localhost:9000)",
                "TAIGA_USERNAME": "<taiga username>",
                "TAIGA_PASSWORD": "<taiga password>"
            }
        }
}

Running the Bridge

Start the MCP server with:

# Default stdio transport
./run.sh

# For SSE transport
./run.sh --sse

Or manually:

# For stdio transport (default)
uv run python src/server.py

# For SSE transport
uv run python src/server.py --sse

Transport Modes

The server supports two transport modes:

  1. stdio (Standard Input/Output) - Default mode for terminal-based clients
  2. SSE (Server-Sent Events) - Web-based transport with server push capabilities

You can set the transport mode in several ways:

  • Using the --sse flag with run.sh or server.py (default is stdio)
  • Setting the TAIGA_TRANSPORT environment variable
  • Adding TAIGA_TRANSPORT=sse to your .env file

Authentication Flow

This MCP bridge uses a session-based authentication model:

  1. Login: Clients must first authenticate using the login tool:

    session = client.call_tool("login", {
        "username": "your_taiga_username",
        "password": "your_taiga_password",
        "host": "https://api.taiga.io" # Optional
    })
    # Save the session_id from the response
    session_id = session["session_id"]
    
  2. Using Tools and Resources: Include the session_id in every API call:

    # For resources, include session_id in the URI
    projects = client.get_resource(f"taiga://projects?session_id={session_id}")
    
    # For project-specific resources
    epics = client.get_resource(f"taiga://projects/123/epics?session_id={session_id}")
    
    # For tools, include session_id as a parameter
    new_project = client.call_tool("create_project", {
        "session_id": session_id,
        "name": "New Project",
        "description": "Description"
    })
    
  3. Check Session Status: You can check if your session is still valid:

    status = client.call_tool("session_status", {"session_id": session_id})
    # Returns information about session validity and remaining time
    
  4. Logout: When finished, you can logout to terminate the session:

    client.call_tool("logout", {"session_id": session_id})
    

Example: Complete Project Creation Workflow

Here's a complete example of creating a project with epics and user stories:

from mcp.client import Client

# Initialize MCP client
client = Client()

# Authenticate and get session ID
auth_result = client.call_tool("login", {
    "username": "admin",
    "password": "password123",
    "host": "https://taiga.mycompany.com"
})
session_id = auth_result["session_id"]

# Create a new project
project = client.call_tool("create_project", {
    "session_id": session_id,
    "name": "My New Project",
    "description": "A test project created via MCP"
})
project_id = project["id"]

# Create an epic
epic = client.call_tool("create_epic", {
    "session_id": session_id,
    "project_id": project_id,
    "subject": "User Authentication",
    "description": "Implement user authentication features"
})
epic_id = epic["id"]

# Create a user story in the epic
story = client.call_tool("create_user_story", {
    "session_id": session_id,
    "project_id": project_id,
    "subject": "User Login",
    "description": "As a user, I want to log in with my credentials",
    "epic_id": epic_id
})

# Logout when done
client.call_tool("logout", {"session_id": session_id})

Development

Project Structure

pyTaigaMCP/
├── src/
│   ├── server.py          # MCP server implementation with tools
│   ├── taiga_client.py    # Taiga API client with all CRUD operations
│   ├── tools.py           # MCP tools definitions
│   └── config.py          # Configuration settings with Pydantic
├── tests/
│   ├── conftest.py        # Shared pytest fixtures
│   ├── unit/              # Unit tests
│   └── integration/       # Integration tests
├── pyproject.toml         # Project configuration and dependencies
├── install.sh             # Installation script
├── run.sh                 # Server execution script
└── README.md              # Project documentation

Testing

Run tests with pytest:

# Run all tests
pytest

# Run only unit tests
pytest tests/unit/

# Run only integration tests
pytest tests/integration/

# Run tests with specific markers
pytest -m "auth"  # Authentication tests
pytest -m "core"  # Core functionality tests

# Run tests with coverage reporting
pytest --cov=src

Debugging and Inspection

Use the included inspector tool for debugging:

# Default stdio transport
./inspect.sh

# For SSE transport
./inspect.sh --sse

# For development mode
./inspect.sh --dev

Error Handling

All API operations return standardized error responses in the following format:

{
  "status": "error",
  "error_type": "ExceptionClassName",
  "message": "Detailed error message"
}

Performance Considerations

The bridge implements several performance optimizations:

  1. Connection Pooling: Reuses HTTP connections for better performance
  2. Rate Limiting: Prevents overloading the Taiga API
  3. Retry Mechanism: Automatically retries failed requests with exponential backoff
  4. Session Cleanup: Regularly cleans up expired sessions to free resources

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Install development dependencies (./install.sh --dev)
  4. Make your changes
  5. Run tests (pytest)
  6. Commit your changes (git commit -m 'Add some amazing feature')
  7. Push to the branch (git push origin feature/amazing-feature)
  8. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • Taiga for their excellent project management platform
  • Model Context Protocol (MCP) for the standardized AI communication framework
  • All contributors who have helped shape this project

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
MCP Package Docs Server

MCP Package Docs Server

Facilitates LLMs to efficiently access and fetch structured documentation for packages in Go, Python, and NPM, enhancing software development with multi-language support and performance optimization.

Featured
Local
TypeScript
Claude Code MCP

Claude Code MCP

An implementation of Claude Code as a Model Context Protocol server that enables using Claude's software engineering capabilities (code generation, editing, reviewing, and file operations) through the standardized MCP interface.

Featured
Local
JavaScript
@kazuph/mcp-taskmanager

@kazuph/mcp-taskmanager

Model Context Protocol server for Task Management. This allows Claude Desktop (or any MCP client) to manage and execute tasks in a queue-based system.

Featured
Local
JavaScript
Linear MCP Server

Linear MCP Server

Enables interaction with Linear's API for managing issues, teams, and projects programmatically through the Model Context Protocol.

Featured
JavaScript
mermaid-mcp-server

mermaid-mcp-server

A Model Context Protocol (MCP) server that converts Mermaid diagrams to PNG images.

Featured
JavaScript
Jira-Context-MCP

Jira-Context-MCP

MCP server to provide Jira Tickets information to AI coding agents like Cursor

Featured
TypeScript
Linear MCP Server

Linear MCP Server

A Model Context Protocol server that integrates with Linear's issue tracking system, allowing LLMs to create, update, search, and comment on Linear issues through natural language interactions.

Featured
JavaScript
Sequential Thinking MCP Server

Sequential Thinking MCP Server

This server facilitates structured problem-solving by breaking down complex issues into sequential steps, supporting revisions, and enabling multiple solution paths through full MCP integration.

Featured
Python