Interact with the Taiga project management platform through an MCP bridge, allowing AI tools to manage project resources.
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:
By using the MCP standard, this bridge allows AI systems to maintain contextual awareness about project state and perform complex project management tasks programmatically.
The bridge supports the following Taiga resources with complete CRUD operations:
This project uses uv for fast, reliable Python package management.
# Clone the repository
git clone https://github.com/your-org/pyTaigaMCP.git
cd pyTaigaMCP
# Install dependencies
./install.sh
For development (includes testing and code quality tools):
./install.sh --dev
If you prefer to install manually:
# Production dependencies only
uv pip install -e .
# With development dependencies
uv pip install -e ".[dev]"
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
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>"
}
}
}
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
The server supports two transport modes:
You can set the transport mode in several ways:
--sse
flag with run.sh or server.py (default is stdio)TAIGA_TRANSPORT
environment variableTAIGA_TRANSPORT=sse
to your .env
fileThis MCP bridge uses a session-based authentication model:
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"]
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"
})
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
Logout: When finished, you can logout to terminate the session:
client.call_tool("logout", {"session_id": session_id})
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})
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
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
Use the included inspector tool for debugging:
# Default stdio transport
./inspect.sh
# For SSE transport
./inspect.sh --sse
# For development mode
./inspect.sh --dev
All API operations return standardized error responses in the following format:
{
"status": "error",
"error_type": "ExceptionClassName",
"message": "Detailed error message"
}
The bridge implements several performance optimizations:
Contributions are welcome! Please feel free to submit a Pull Request.
git checkout -b feature/amazing-feature
)./install.sh --dev
)pytest
)git commit -m 'Add some amazing feature'
)git push origin feature/amazing-feature
)This project is licensed under the MIT License - see the LICENSE file for details.
AI-powered regulatory compliance checking for financial marketing content across multiple jurisdictions.
Interact with Home Assistant to control smart home devices, query states, manage automations, and troubleshoot your smart home setup.
Enables AI assistants to seamlessly interact with your Twenty CRM data through its API.
An optimized, read-only MCP server for the Notion API with asynchronous processing.
Read, create, update and delete Google Keep notes.
Manage task backlogs using a file-based JSON storage system.
Interact with the HubSpot CRM API to manage contacts, companies, and deals.
Create Anki flashcards using natural language by connecting to the AnkiConnect add-on.
Manage Zendesk tickets and comments, analyze tickets, draft responses, and access Help Center articles as a knowledge base.
Interact with Outline, the open-source knowledge base and wiki, directly through your AI assistant.