1200 lines
30 KiB
Markdown
1200 lines
30 KiB
Markdown
# Team Layout Management Tools
|
|
|
|
> MCP tools for managing standardized team structure across projects
|
|
|
|
**Version:** 1.0
|
|
**Applies To:** All projects using the Agent Guardrails Template
|
|
|
|
---
|
|
|
|
## Overview
|
|
|
|
The Team Layout Management system provides MCP tools to initialize, manage, and validate team structures for software development projects. It enforces a standardized 12-team structure across 5 phases of the development lifecycle, ensuring proper governance, phase gates, and role assignments.
|
|
|
|
These tools use the Go `team` package (`mcp-server/internal/team/`) to provide real-time team management capabilities through the MCP protocol. As of v2.6.0, all functionality has been migrated from Python to Go for improved performance and security.
|
|
|
|
---
|
|
|
|
## Team Structure
|
|
|
|
The system manages 12 teams across 5 phases of the software development lifecycle:
|
|
|
|
### Phase 1: Strategy, Governance & Planning
|
|
- **Team 1:** Business & Product Strategy (The "Why")
|
|
- **Team 2:** Enterprise Architecture (The "Standards")
|
|
- **Team 3:** GRC (Governance, Risk, & Compliance)
|
|
|
|
### Phase 2: Platform & Foundation
|
|
- **Team 4:** Infrastructure & Cloud Ops
|
|
- **Team 5:** Platform Engineering (The "Internal Tools")
|
|
- **Team 6:** Data Governance & Analytics
|
|
|
|
### Phase 3: The Build Squads
|
|
- **Team 7:** Core Feature Squad (The "Devs")
|
|
- **Team 8:** Middleware & Integration
|
|
|
|
### Phase 4: Validation & Hardening
|
|
- **Team 9:** Cybersecurity (AppSec)
|
|
- **Team 10:** Quality Engineering (SDET)
|
|
|
|
### Phase 5: Delivery & Sustainment
|
|
- **Team 11:** Site Reliability Engineering (SRE)
|
|
- **Team 12:** IT Operations & Support (NOC)
|
|
|
|
For complete team details, see [TEAM_STRUCTURE.md](./TEAM_STRUCTURE.md).
|
|
|
|
---
|
|
|
|
## Available Tools
|
|
|
|
### guardrail_team_init
|
|
|
|
Initialize team structure for a project.
|
|
|
|
**Purpose:** Creates the initial team structure configuration for a new project, setting up all 12 teams with their default roles and states.
|
|
|
|
**Parameters:**
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `project_name` | string | Yes | Name of the project (alphanumeric, hyphen, underscore only) |
|
|
|
|
**Constraints:**
|
|
- Project name must be 64 characters or less
|
|
- Allowed characters: letters, numbers, hyphens (`-`), underscores (`_`)
|
|
- No spaces or special characters permitted
|
|
|
|
**Example:**
|
|
|
|
```json
|
|
{
|
|
"method": "tools/call",
|
|
"params": {
|
|
"name": "guardrail_team_init",
|
|
"arguments": {
|
|
"project_name": "my-project"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
**Response:** Confirmation of initialized 12-team structure for the project.
|
|
|
|
---
|
|
|
|
### guardrail_team_list
|
|
|
|
List all teams and their status.
|
|
|
|
**Purpose:** Display all teams for a project, including their assigned roles, completion status, and current state.
|
|
|
|
**Parameters:**
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `project_name` | string | Yes | Name of the project |
|
|
| `phase` | string | No | Filter by phase (e.g., "Phase 1", "Phase 2") |
|
|
|
|
**Example (All Teams):**
|
|
|
|
```json
|
|
{
|
|
"method": "tools/call",
|
|
"params": {
|
|
"name": "guardrail_team_list",
|
|
"arguments": {
|
|
"project_name": "my-project"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
**Example (Filtered by Phase):**
|
|
|
|
```json
|
|
{
|
|
"method": "tools/call",
|
|
"params": {
|
|
"name": "guardrail_team_list",
|
|
"arguments": {
|
|
"project_name": "my-project",
|
|
"phase": "Phase 1"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
**Response:** List of teams with role assignments and completion status.
|
|
|
|
---
|
|
|
|
### guardrail_team_assign
|
|
|
|
Assign a person to a role in a team.
|
|
|
|
**Purpose:** Assign team members to specific roles within a team, enabling proper resource allocation and responsibility tracking.
|
|
|
|
**Parameters:**
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `project_name` | string | Yes | Name of the project |
|
|
| `team_id` | number | Yes | Team ID (1-12) |
|
|
| `role_name` | string | Yes | Name of the role to assign |
|
|
| `person` | string | Yes | Name of the person to assign |
|
|
|
|
**Example:**
|
|
|
|
```json
|
|
{
|
|
"method": "tools/call",
|
|
"params": {
|
|
"name": "guardrail_team_assign",
|
|
"arguments": {
|
|
"project_name": "my-project",
|
|
"team_id": 7,
|
|
"role_name": "Technical Lead",
|
|
"person": "Jane Developer"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
**Response:** Confirmation of role assignment with updated team roster.
|
|
|
|
---
|
|
|
|
### guardrail_team_unassign
|
|
|
|
Remove a person from a role in a team.
|
|
|
|
**Purpose:** Unassign team members from specific roles, enabling role reassignment and team restructuring.
|
|
|
|
**Parameters:**
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `project_name` | string | Yes | Name of the project |
|
|
| `team_id` | number | Yes | Team ID (1-12) |
|
|
| `role_name` | string | Yes | Name of the role to unassign |
|
|
|
|
**Example:**
|
|
|
|
```json
|
|
{
|
|
"method": "tools/call",
|
|
"params": {
|
|
"name": "guardrail_team_unassign",
|
|
"arguments": {
|
|
"project_name": "my-project",
|
|
"team_id": 7,
|
|
"role_name": "Technical Lead"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
**Response:** Confirmation of role unassignment.
|
|
|
|
---
|
|
|
|
### guardrail_team_status
|
|
|
|
Get phase or project status.
|
|
|
|
**Purpose:** Check the completion status of a specific phase or the entire project, showing which roles are assigned and which teams are ready.
|
|
|
|
**Parameters:**
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `project_name` | string | Yes | Name of the project |
|
|
| `phase` | string | No | Specific phase to check (e.g., "Phase 1") |
|
|
|
|
**Example (Project Status):**
|
|
|
|
```json
|
|
{
|
|
"method": "tools/call",
|
|
"params": {
|
|
"name": "guardrail_team_status",
|
|
"arguments": {
|
|
"project_name": "my-project"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
**Example (Phase Status):**
|
|
|
|
```json
|
|
{
|
|
"method": "tools/call",
|
|
"params": {
|
|
"name": "guardrail_team_status",
|
|
"arguments": {
|
|
"project_name": "my-project",
|
|
"phase": "Phase 2"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
**Response:** Phase status with team completion percentages and role assignments.
|
|
|
|
---
|
|
|
|
### guardrail_phase_gate_check
|
|
|
|
Check if phase gate requirements are met.
|
|
|
|
**Purpose:** Validate that all requirements are satisfied before transitioning from one phase to the next, enforcing the phase gate process.
|
|
|
|
**Parameters:**
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `project_name` | string | Yes | Name of the project |
|
|
| `from_phase` | number | Yes | Source phase number (1-4) |
|
|
| `to_phase` | number | Yes | Target phase number (2-5) |
|
|
|
|
**Phase Gates:**
|
|
|
|
| Gate | From | To | Name |
|
|
|------|------|-----|------|
|
|
| 1_to_2 | Phase 1 | Phase 2 | Architecture Review Board |
|
|
| 2_to_3 | Phase 2 | Phase 3 | Environment Readiness |
|
|
| 3_to_4 | Phase 3 | Phase 4 | Feature Complete + Code Review |
|
|
| 4_to_5 | Phase 4 | Phase 5 | Security + QA Sign-off |
|
|
|
|
**Example:**
|
|
|
|
```json
|
|
{
|
|
"method": "tools/call",
|
|
"params": {
|
|
"name": "guardrail_phase_gate_check",
|
|
"arguments": {
|
|
"project_name": "my-project",
|
|
"from_phase": 1,
|
|
"to_phase": 2
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
**Response:** Gate name, required teams, and deliverables checklist.
|
|
|
|
---
|
|
|
|
### guardrail_agent_team_map
|
|
|
|
Get the team assignment for an agent type.
|
|
|
|
**Purpose:** Map AI agent types to their appropriate teams and roles, ensuring agents work within their designated scope.
|
|
|
|
**Parameters:**
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `agent_type` | string | Yes | Type of agent (see supported types below) |
|
|
|
|
**Supported Agent Types:**
|
|
|
|
| Agent Type | Assigned Team | Phase | Roles |
|
|
|------------|---------------|-------|-------|
|
|
| `planner` | Team 2 | Phase 1 | Solution Architect, Business Systems Analyst |
|
|
| `architect` | Team 2 | Phase 1 | Chief Architect, Domain Architect |
|
|
| `infrastructure` | Team 4 | Phase 2 | Cloud Architect, IaC Engineer |
|
|
| `platform` | Team 5 | Phase 2 | CI/CD Architect, Kubernetes Administrator |
|
|
| `backend` | Team 7 | Phase 3 | Senior Backend Engineer, Technical Lead |
|
|
| `frontend` | Team 7 | Phase 3 | Senior Frontend Engineer, Accessibility Expert |
|
|
| `security` | Team 9 | Phase 4 | Security Architect, Vulnerability Researcher |
|
|
| `qa` | Team 10 | Phase 4 | QA Architect, SDET |
|
|
| `sre` | Team 11 | Phase 5 | SRE Lead, Observability Engineer |
|
|
| `ops` | Team 12 | Phase 5 | Release Manager, NOC Analyst |
|
|
|
|
**Example:**
|
|
|
|
```json
|
|
{
|
|
"method": "tools/call",
|
|
"params": {
|
|
"name": "guardrail_agent_team_map",
|
|
"arguments": {
|
|
"agent_type": "backend"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
**Response:** Assigned team ID, phase, and applicable roles.
|
|
|
|
---
|
|
|
|
### guardrail_team_size_validate
|
|
|
|
Validate team sizes meet the 4-6 member requirement.
|
|
|
|
**Purpose:** Ensures all teams have between 4 and 6 members (inclusive) per TEAM-007 compliance rule.
|
|
|
|
**Parameters:**
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| `project_name` | string | Yes | Name of the project |
|
|
| `team_id` | number | No | Optional: Specific team ID to validate |
|
|
|
|
**Example:**
|
|
|
|
```json
|
|
{
|
|
"method": "tools/call",
|
|
"params": {
|
|
"name": "guardrail_team_size_validate",
|
|
"arguments": {
|
|
"project_name": "my-project"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
**Response:**
|
|
|
|
```
|
|
✅ All 12 teams have valid size (4-6 members)
|
|
```
|
|
|
|
Or if violations found:
|
|
|
|
```
|
|
❌ Team size violations found:
|
|
Team 3 (GRC) has 3 members, minimum is 4
|
|
Team 7 (Core Feature Squad) has 8 members, maximum is 6
|
|
```
|
|
|
|
---
|
|
|
|
## Phase Gates
|
|
|
|
Phase gates ensure proper completion and approval before progressing to the next phase of development.
|
|
|
|
### Gate 1: Architecture Review Board (Phase 1 to Phase 2)
|
|
|
|
**Required Teams:** 1, 2, 3
|
|
**Approval Required:** Team 2
|
|
|
|
**Deliverables:**
|
|
- Architecture Decision Records
|
|
- Approved Tech List
|
|
- Compliance Checklist
|
|
|
|
**Purpose:** Validate that business case, architecture, and compliance requirements are established before infrastructure work begins.
|
|
|
|
---
|
|
|
|
### Gate 2: Environment Readiness (Phase 2 to Phase 3)
|
|
|
|
**Required Teams:** 4, 5, 6
|
|
**Approval Required:** Teams 4, 5
|
|
|
|
**Deliverables:**
|
|
- Infrastructure Provisioned
|
|
- CI/CD Pipelines
|
|
- Data Models
|
|
|
|
**Purpose:** Ensure platform and infrastructure are ready before development teams begin building features.
|
|
|
|
---
|
|
|
|
### Gate 3: Feature Complete + Code Review (Phase 3 to Phase 4)
|
|
|
|
**Required Teams:** 7, 8
|
|
**Approval Required:** Team 7
|
|
|
|
**Deliverables:**
|
|
- Features Implemented
|
|
- Code Reviewed
|
|
- Documentation Complete
|
|
|
|
**Purpose:** Confirm that all features are developed and reviewed before entering validation and hardening phase.
|
|
|
|
---
|
|
|
|
### Gate 4: Security + QA Sign-off (Phase 4 to Phase 5)
|
|
|
|
**Required Teams:** 9, 10
|
|
**Approval Required:** Teams 9, 10
|
|
|
|
**Deliverables:**
|
|
- Security Review Passed
|
|
- Test Coverage Met
|
|
- UAT Sign-off
|
|
|
|
**Purpose:** Ensure security clearance and quality assurance approval before production deployment.
|
|
|
|
---
|
|
|
|
## Security
|
|
|
|
### Project Name Validation
|
|
|
|
All team tools validate the `project_name` parameter to prevent command injection and ensure consistent naming:
|
|
|
|
- **Maximum Length:** 64 characters
|
|
- **Allowed Characters:**
|
|
- Letters (a-z, A-Z)
|
|
- Numbers (0-9)
|
|
- Hyphens (`-`)
|
|
- Underscores (`_`)
|
|
|
|
**Valid Examples:**
|
|
- `my-project`
|
|
- `project_123`
|
|
- `team-alpha-v2`
|
|
|
|
**Invalid Examples:**
|
|
- `my project` (contains space)
|
|
- `project;rm -rf /` (contains special characters)
|
|
- `../etc/passwd` (path traversal attempt)
|
|
|
|
### Role Name Validation
|
|
|
|
The `role_name` parameter is validated for security and consistency:
|
|
|
|
- **Maximum Length:** 128 characters
|
|
- **Required:** Yes (cannot be empty)
|
|
- **Allowed Characters:**
|
|
- Letters (a-z, A-Z)
|
|
- Numbers (0-9)
|
|
- Spaces
|
|
- Hyphens (`-`)
|
|
- Underscores (`_`)
|
|
- Forward slashes (`/`)
|
|
- Ampersands (`&`)
|
|
- Parentheses (`(` `)`)
|
|
- Periods (`.`)
|
|
- **Forbidden Patterns:** Shell metacharacters (`;`, `|`, `&&`, `||`, backticks, `$`, `<`, `>`)
|
|
|
|
**Valid Examples:**
|
|
- `Technical Lead`
|
|
- `Senior Backend Engineer`
|
|
- `DevOps/SRE`
|
|
- `QA Architect (Automation)`
|
|
|
|
**Invalid Examples:**
|
|
- `role; rm -rf /` (contains shell metacharacters)
|
|
- `$(whoami)` (contains command substitution)
|
|
- (empty string)
|
|
|
|
### Person Name Validation
|
|
|
|
The `person` parameter is validated to ensure safe input:
|
|
|
|
- **Maximum Length:** 128 characters
|
|
- **Required:** Yes (cannot be empty)
|
|
- **Allowed Characters:**
|
|
- Letters (a-z, A-Z)
|
|
- Spaces
|
|
- Hyphens (`-`)
|
|
- Apostrophes (`'`) for names like "O'Connor"
|
|
- **Forbidden Patterns:** Path traversal, shell metacharacters, special symbols
|
|
|
|
**Valid Examples:**
|
|
- `Alice Johnson`
|
|
- `Bob O'Connor`
|
|
- `Mary-Jane Watson`
|
|
|
|
**Invalid Examples:**
|
|
- `user; cat /etc/passwd` (contains shell metacharacters)
|
|
- `../../../etc/shadow` (path traversal attempt)
|
|
- (empty string)
|
|
|
|
### Phase Validation
|
|
|
|
The optional `phase` parameter must be one of the valid phase names:
|
|
|
|
- **Valid Values:** `Phase 1`, `Phase 2`, `Phase 3`, `Phase 4`, `Phase 5`
|
|
- **Case Sensitive:** Yes
|
|
- **Required:** No (optional filter)
|
|
|
|
**Valid Examples:**
|
|
- `Phase 1`
|
|
- `Phase 3`
|
|
|
|
**Invalid Examples:**
|
|
- `phase 1` (wrong case)
|
|
- `Phase One` (invalid format)
|
|
- `1` (missing "Phase" prefix)
|
|
|
|
### Error Handling
|
|
|
|
Team tools use standard HTTP status codes and structured error responses. All errors follow a consistent format with error code, message, and troubleshooting guidance.
|
|
|
|
#### Error Response Format
|
|
|
|
```json
|
|
{
|
|
"IsError": true,
|
|
"Content": [{
|
|
"Type": "text",
|
|
"Text": "TEAM-001: Team not found"
|
|
}],
|
|
"error_code": "TEAM-001",
|
|
"error_message": "Team with ID 99 does not exist",
|
|
"documentation_url": "https://docs.example.com/errors/TEAM-001"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
#### Error Code Reference
|
|
|
|
| HTTP Code | Error Code | Description |
|
|
|-----------|------------|-------------|
|
|
| 400 | TEAM-001 | Team not found |
|
|
| 400 | TEAM-002 | Invalid team ID (must be 1-12) |
|
|
| 400 | TEAM-003 | Role not found in team |
|
|
| 400 | TEAM-004 | Person already assigned to role |
|
|
| 400 | TEAM-005 | Team size violation (TEAM-007) |
|
|
| 401 | AUTH-001 | Authentication required |
|
|
| 401 | AUTH-002 | Invalid API key |
|
|
| 403 | AUTH-003 | Insufficient permissions |
|
|
| 404 | PROJ-001 | Project not found |
|
|
| 404 | PROJ-002 | Project configuration missing |
|
|
| 429 | RATE-001 | Rate limit exceeded |
|
|
| 500 | SERV-001 | Internal server error |
|
|
| 500 | SERV-002 | Team manager script failure |
|
|
|
|
---
|
|
|
|
#### 400 Bad Request Errors
|
|
|
|
##### TEAM-001: Team Not Found
|
|
|
|
**Cause:** The specified team ID does not exist for the project.
|
|
|
|
**Example:**
|
|
```json
|
|
{
|
|
"IsError": true,
|
|
"Content": [{
|
|
"Type": "text",
|
|
"Text": "TEAM-001: Team not found"
|
|
}],
|
|
"error_code": "TEAM-001",
|
|
"error_message": "Team with ID 99 does not exist in project 'my-project'"
|
|
}
|
|
```
|
|
|
|
**Troubleshooting:**
|
|
1. Verify the team ID is between 1 and 12
|
|
2. Run `guardrail_team_list` to see available teams
|
|
3. Check that the project was initialized with `guardrail_team_init`
|
|
|
|
---
|
|
|
|
##### TEAM-002: Invalid Team ID
|
|
|
|
**Cause:** Team ID is outside the valid range (1-12).
|
|
|
|
**Example:**
|
|
```json
|
|
{
|
|
"IsError": true,
|
|
"Content": [{
|
|
"Type": "text",
|
|
"Text": "TEAM-002: Invalid team ID"
|
|
}],
|
|
"error_code": "TEAM-002",
|
|
"error_message": "Team ID must be between 1 and 12, got: 15"
|
|
}
|
|
```
|
|
|
|
**Troubleshooting:**
|
|
1. Use team IDs 1-12 only (see Team Structure section)
|
|
2. Verify your mapping logic for team assignments
|
|
|
|
---
|
|
|
|
##### TEAM-003: Role Not Found
|
|
|
|
**Cause:** Attempted to assign/unassign a role that does not exist in the team.
|
|
|
|
**Example:**
|
|
```json
|
|
{
|
|
"IsError": true,
|
|
"Content": [{
|
|
"Type": "text",
|
|
"Text": "TEAM-003: Role not found"
|
|
}],
|
|
"error_code": "TEAM-003",
|
|
"error_message": "Role 'Junior Developer' not found in Team 7 (Core Feature Squad)"
|
|
}
|
|
```
|
|
|
|
**Troubleshooting:**
|
|
1. Check TEAM_STRUCTURE.md for valid role names per team
|
|
2. Use exact role names (case-sensitive)
|
|
3. Run `guardrail_team_list` to see assigned roles
|
|
|
|
---
|
|
|
|
##### TEAM-004: Person Already Assigned
|
|
|
|
**Cause:** Attempted to assign a person to a role that is already filled.
|
|
|
|
**Example:**
|
|
```json
|
|
{
|
|
"IsError": true,
|
|
"Content": [{
|
|
"Type": "text",
|
|
"Text": "TEAM-004: Person already assigned"
|
|
}],
|
|
"error_code": "TEAM-004",
|
|
"error_message": "Role 'Technical Lead' in Team 7 already has 'Alice Johnson' assigned"
|
|
}
|
|
```
|
|
|
|
**Troubleshooting:**
|
|
1. Unassign the current person first with `guardrail_team_unassign`
|
|
2. Or assign the new person to a different role
|
|
3. Check current assignments with `guardrail_team_list`
|
|
|
|
---
|
|
|
|
##### TEAM-005: Team Size Violation
|
|
|
|
**Cause:** Operation would violate TEAM-007 compliance (4-6 members per team).
|
|
|
|
**Example:**
|
|
```json
|
|
{
|
|
"IsError": true,
|
|
"Content": [{
|
|
"Type": "text",
|
|
"Text": "TEAM-005: Team size violation"
|
|
}],
|
|
"error_code": "TEAM-005",
|
|
"error_message": "Team 7 has 6 members (maximum). Cannot add more members."
|
|
}
|
|
```
|
|
|
|
**Troubleshooting:**
|
|
1. Check current team size with `guardrail_team_size_validate`
|
|
2. Unassign a member before adding a new one
|
|
3. Verify team size requirements in TEAM_STRUCTURE.md
|
|
|
|
---
|
|
|
|
#### 401 Unauthorized Errors
|
|
|
|
##### AUTH-001: Authentication Required
|
|
|
|
**Cause:** Request missing authentication token.
|
|
|
|
**Example:**
|
|
```json
|
|
{
|
|
"IsError": true,
|
|
"Content": [{
|
|
"Type": "text",
|
|
"Text": "AUTH-001: Authentication required"
|
|
}],
|
|
"error_code": "AUTH-001",
|
|
"error_message": "API key required for this endpoint"
|
|
}
|
|
```
|
|
|
|
**Troubleshooting:**
|
|
1. Include `Authorization: Bearer YOUR_API_KEY` header
|
|
2. Verify API key is valid and not expired
|
|
3. Check API key permissions
|
|
|
|
---
|
|
|
|
##### AUTH-002: Invalid API Key
|
|
|
|
**Cause:** Provided API key is invalid or revoked.
|
|
|
|
**Example:**
|
|
```json
|
|
{
|
|
"IsError": true,
|
|
"Content": [{
|
|
"Type": "text",
|
|
"Text": "AUTH-002: Invalid API key"
|
|
}],
|
|
"error_code": "AUTH-002",
|
|
"error_message": "The provided API key is not valid"
|
|
}
|
|
```
|
|
|
|
**Troubleshooting:**
|
|
1. Generate a new API key from the dashboard
|
|
2. Ensure the key has not been revoked
|
|
3. Check for typos in the Authorization header
|
|
|
|
---
|
|
|
|
#### 403 Forbidden Errors
|
|
|
|
##### AUTH-003: Insufficient Permissions
|
|
|
|
**Cause:** Authenticated user lacks permission for the operation.
|
|
|
|
**Example:**
|
|
```json
|
|
{
|
|
"IsError": true,
|
|
"Content": [{
|
|
"Type": "text",
|
|
"Text": "AUTH-003: Insufficient permissions"
|
|
}],
|
|
"error_code": "AUTH-003",
|
|
"error_message": "User 'viewer@example.com' cannot modify team assignments"
|
|
}
|
|
```
|
|
|
|
**Troubleshooting:**
|
|
1. Verify user has appropriate role (admin, team-lead)
|
|
2. Check project permissions in admin panel
|
|
3. Contact project administrator for access
|
|
|
|
---
|
|
|
|
#### 404 Not Found Errors
|
|
|
|
##### PROJ-001: Project Not Found
|
|
|
|
**Cause:** Project name does not exist.
|
|
|
|
**Example:**
|
|
```json
|
|
{
|
|
"IsError": true,
|
|
"Content": [{
|
|
"Type": "text",
|
|
"Text": "PROJ-001: Project not found"
|
|
}],
|
|
"error_code": "PROJ-001",
|
|
"error_message": "Project 'nonexistent-project' does not exist"
|
|
}
|
|
```
|
|
|
|
**Troubleshooting:**
|
|
1. Initialize project first with `guardrail_team_init`
|
|
2. Verify project name spelling (case-sensitive)
|
|
3. Check project exists: `guardrail_team_list --project-name <name>`
|
|
|
|
---
|
|
|
|
##### PROJ-002: Project Configuration Missing
|
|
|
|
**Cause:** Project was partially initialized or config file corrupted.
|
|
|
|
**Example:**
|
|
```json
|
|
{
|
|
"IsError": true,
|
|
"Content": [{
|
|
"Type": "text",
|
|
"Text": "PROJ-002: Project configuration missing"
|
|
}],
|
|
"error_code": "PROJ-002",
|
|
"error_message": "Team configuration file missing for project 'my-project'"
|
|
}
|
|
```
|
|
|
|
**Troubleshooting:**
|
|
1. Re-initialize project with `guardrail_team_init`
|
|
2. Check `.teams/` directory for configuration files
|
|
3. Restore from backup if available
|
|
|
|
---
|
|
|
|
#### 429 Rate Limit Exceeded
|
|
|
|
##### RATE-001: Rate Limit Exceeded
|
|
|
|
**Cause:** Too many requests in a short time period.
|
|
|
|
**Example:**
|
|
```json
|
|
{
|
|
"IsError": true,
|
|
"Content": [{
|
|
"Type": "text",
|
|
"Text": "RATE-001: Rate limit exceeded"
|
|
}],
|
|
"error_code": "RATE-001",
|
|
"error_message": "Rate limit exceeded. Retry after 60 seconds."
|
|
}
|
|
```
|
|
|
|
**Troubleshooting:**
|
|
1. Implement exponential backoff in batch scripts
|
|
2. Reduce request frequency (default limit: 100 req/min)
|
|
3. Contact support to increase rate limits
|
|
|
|
**Retry Strategy:**
|
|
```bash
|
|
# Example with exponential backoff
|
|
for i in 1 2 4 8; do
|
|
response=$(curl -s ...)
|
|
if ! echo "$response" | grep -q "RATE-001"; then
|
|
break
|
|
fi
|
|
echo "Rate limited. Retrying in ${i}s..."
|
|
sleep $i
|
|
done
|
|
```
|
|
|
|
---
|
|
|
|
#### 500 Internal Server Error
|
|
|
|
##### SERV-001: Internal Server Error
|
|
|
|
**Cause:** Unexpected server error.
|
|
|
|
**Example:**
|
|
```json
|
|
{
|
|
"IsError": true,
|
|
"Content": [{
|
|
"Type": "text",
|
|
"Text": "SERV-001: Internal server error"
|
|
}],
|
|
"error_code": "SERV-001",
|
|
"error_message": "An unexpected error occurred. Incident ID: abc-123-xyz"
|
|
}
|
|
```
|
|
|
|
**Troubleshooting:**
|
|
1. Retry the request after a brief delay
|
|
2. Check service status page for outages
|
|
3. Contact support with the incident ID
|
|
|
|
---
|
|
|
|
##### SERV-002: Team Manager Execution Failure
|
|
|
|
**Cause:** Backend team management operation failed.
|
|
|
|
**Example:**
|
|
```json
|
|
{
|
|
"IsError": true,
|
|
"Content": [{
|
|
"Type": "text",
|
|
"Text": "SERV-002: Team manager execution failure"
|
|
}],
|
|
"error_code": "SERV-002",
|
|
"error_message": "Team operation failed: unable to initialize team"
|
|
}
|
|
```
|
|
|
|
**Troubleshooting:**
|
|
1. Check server logs for error details
|
|
2. Verify `.teams/` directory has write permissions
|
|
3. Ensure project name is valid (alphanumeric, hyphens, underscores only)
|
|
|
|
---
|
|
|
|
#### Validation Errors
|
|
|
|
If parameter validation fails, tools return an error response:
|
|
|
|
```json
|
|
{
|
|
"IsError": true,
|
|
"Content": [{
|
|
"Type": "text",
|
|
"Text": "project_name must contain only letters, numbers, hyphens, and underscores"
|
|
}],
|
|
"error_code": "VALID-001",
|
|
"error_message": "Invalid project_name format",
|
|
"validation_errors": [{
|
|
"field": "project_name",
|
|
"code": "INVALID_CHARS",
|
|
"message": "Contains invalid characters"
|
|
}]
|
|
}
|
|
```
|
|
|
|
### Team Size Compliance (TEAM-007)
|
|
|
|
All teams **MUST** comply with the 4-6 member size requirement:
|
|
|
|
- **Minimum:** 4 members per team
|
|
- **Maximum:** 6 members per team
|
|
- **Rule ID:** TEAM-007
|
|
- **Severity:** Error
|
|
|
|
**Validation:**
|
|
Use `guardrail_team_size_validate` to check compliance:
|
|
|
|
```json
|
|
{
|
|
"method": "tools/call",
|
|
"params": {
|
|
"name": "guardrail_team_size_validate",
|
|
"arguments": {
|
|
"project_name": "my-project"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
**Why This Matters:**
|
|
- Teams with fewer than 4 members lack adequate role coverage
|
|
- Teams with more than 6 members suffer from coordination overhead
|
|
- This rule applies to human teams, AI agent teams, and mixed teams
|
|
|
|
### Implementation Details
|
|
|
|
Team tools use the native Go `team` package for persistence. Project data is stored in `.teams/{project_name}.json`. The Go implementation provides the same functionality as the previous Python script with improved performance and security.
|
|
|
|
---
|
|
|
|
## Workflow Integration
|
|
|
|
### Typical Project Setup Workflow
|
|
|
|
```
|
|
1. Initialize team structure
|
|
└─ guardrail_team_init → Creates all 12 teams
|
|
|
|
2. Assign team members to roles
|
|
└─ guardrail_team_assign → Assign people to specific roles
|
|
|
|
3. Check phase status
|
|
└─ guardrail_team_status → Verify team readiness
|
|
|
|
4. Progress through phase gates
|
|
└─ guardrail_phase_gate_check → Validate gate requirements
|
|
```
|
|
|
|
### Agent Assignment Workflow
|
|
|
|
```
|
|
1. Determine agent type (e.g., "backend", "security")
|
|
|
|
2. Get team mapping
|
|
└─ guardrail_agent_team_map → Identify assigned team
|
|
|
|
3. Check team status
|
|
└─ guardrail_team_status → Verify team is active
|
|
|
|
4. Begin work within assigned scope
|
|
```
|
|
|
|
### Example: Complete Project Initialization
|
|
|
|
```bash
|
|
# Initialize project
|
|
curl -X POST "http://localhost:8094/mcp/v1/message?session_id=abc123" \
|
|
-H "Authorization: Bearer YOUR_API_KEY" \
|
|
-d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"guardrail_team_init","arguments":{"project_name":"web-platform"}}}'
|
|
|
|
# Assign backend lead
|
|
curl -X POST "http://localhost:8094/mcp/v1/message?session_id=abc123" \
|
|
-H "Authorization: Bearer YOUR_API_KEY" \
|
|
-d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"guardrail_team_assign","arguments":{"project_name":"web-platform","team_id":7,"role_name":"Technical Lead","person":"Alice Developer"}}}'
|
|
|
|
# Check phase gate
|
|
curl -X POST "http://localhost:8094/mcp/v1/message?session_id=abc123" \
|
|
-H "Authorization: Bearer YOUR_API_KEY" \
|
|
-d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"guardrail_phase_gate_check","arguments":{"project_name":"web-platform","from_phase":2,"to_phase":3}}}'
|
|
```
|
|
|
|
---
|
|
|
|
## Batch Operations
|
|
|
|
When setting up a complete project, you may need to perform multiple team assignments. Here are recommended patterns for batch operations:
|
|
|
|
### Batch Team Assignment Pattern
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
# batch_assign_teams.sh - Assign multiple team members in sequence
|
|
|
|
PROJECT_NAME="$1"
|
|
|
|
if [ -z "$PROJECT_NAME" ]; then
|
|
echo "Usage: $0 <project_name>"
|
|
exit 1
|
|
fi
|
|
|
|
# Define assignments as: "team_id|role_name|person_name"
|
|
declare -a ASSIGNMENTS=(
|
|
"2|Solution Architect|Alice Johnson"
|
|
"2|Domain Architect|Bob Smith"
|
|
"4|Cloud Architect|Carol White"
|
|
"7|Technical Lead|David Brown"
|
|
"7|Senior Backend Engineer|Eve Davis"
|
|
"9|Security Architect|Frank Miller"
|
|
"10|QA Architect|Grace Wilson"
|
|
)
|
|
|
|
echo "Initializing team structure..."
|
|
curl -s -X POST "http://localhost:8094/mcp/v1/message?session_id=$SESSION_ID" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{\"jsonrpc\":\"2.0\",\"method\":\"tools/call\",\"params\":{\"name\":\"guardrail_team_init\",\"arguments\":{\"project_name\":\"$PROJECT_NAME\"}}}"
|
|
|
|
echo "Assigning team members..."
|
|
for assignment in "${ASSIGNMENTS[@]}"; do
|
|
IFS='|' read -r team_id role_name person <<< "$assignment"
|
|
|
|
echo " -> Assigning $person as $role_name to Team $team_id"
|
|
curl -s -X POST "http://localhost:8094/mcp/v1/message?session_id=$SESSION_ID" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{\"jsonrpc\":\"2.0\",\"method\":\"tools/call\",\"params\":{\"name\":\"guardrail_team_assign\",\"arguments\":{\"project_name\":\"$PROJECT_NAME\",\"team_id\":$team_id,\"role_name\":\"$role_name\",\"person\":\"$person\"}}}"
|
|
done
|
|
|
|
echo "Validating team sizes..."
|
|
curl -s -X POST "http://localhost:8094/mcp/v1/message?session_id=$SESSION_ID" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{\"jsonrpc\":\"2.0\",\"method\":\"tools/call\",\"params\":{\"name\":\"guardrail_team_size_validate\",\"arguments\":{\"project_name\":\"$PROJECT_NAME\"}}}"
|
|
|
|
echo "Done!"
|
|
```
|
|
|
|
### Batch Role Reassignment Pattern
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
# batch_reassign.sh - Unassign and reassign roles for restructuring
|
|
|
|
PROJECT_NAME="$1"
|
|
|
|
# First unassign old roles, then assign new ones
|
|
declare -a UNASSIGNMENTS=(
|
|
"7|Old Technical Lead"
|
|
"7|Legacy Developer"
|
|
)
|
|
|
|
declare -a NEW_ASSIGNMENTS=(
|
|
"7|Technical Lead|New Lead Name"
|
|
"7|Senior Backend Engineer|New Developer"
|
|
)
|
|
|
|
# Unassign old roles
|
|
for unassign in "${UNASSIGNMENTS[@]}"; do
|
|
IFS='|' read -r team_id role_name <<< "$unassign"
|
|
echo "Unassigning $role_name from Team $team_id"
|
|
curl -s -X POST "http://localhost:8094/mcp/v1/message?session_id=$SESSION_ID" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{\"jsonrpc\":\"2.0\",\"method\":\"tools/call\",\"params\":{\"name\":\"guardrail_team_unassign\",\"arguments\":{\"project_name\":\"$PROJECT_NAME\",\"team_id\":$team_id,\"role_name\":\"$role_name\"}}}"
|
|
done
|
|
|
|
# Assign new roles
|
|
for assign in "${NEW_ASSIGNMENTS[@]}"; do
|
|
IFS='|' read -r team_id role_name person <<< "$assign"
|
|
echo "Assigning $person as $role_name to Team $team_id"
|
|
curl -s -X POST "http://localhost:8094/mcp/v1/message?session_id=$SESSION_ID" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{\"jsonrpc\":\"2.0\",\"method\":\"tools/call\",\"params\":{\"name\":\"guardrail_team_assign\",\"arguments\":{\"project_name\":\"$PROJECT_NAME\",\"team_id\":$team_id,\"role_name\":\"$role_name\",\"person\":\"$person\"}}}"
|
|
done
|
|
```
|
|
|
|
### Validation Before Phase Transition
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
# validate_phase_transition.sh - Check phase gate before transitioning
|
|
|
|
PROJECT_NAME="$1"
|
|
FROM_PHASE="$2"
|
|
TO_PHASE="$3"
|
|
|
|
echo "Checking phase gate from Phase $FROM_PHASE to Phase $TO_PHASE..."
|
|
|
|
# Validate team sizes first
|
|
echo "Validating team sizes..."
|
|
curl -s -X POST "http://localhost:8094/mcp/v1/message?session_id=$SESSION_ID" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{\"jsonrpc\":\"2.0\",\"method\":\"tools/call\",\"params\":{\"name\":\"guardrail_team_size_validate\",\"arguments\":{\"project_name\":\"$PROJECT_NAME\"}}}"
|
|
|
|
# Check phase status for all teams in source phase
|
|
echo "Checking teams in Phase $FROM_PHASE..."
|
|
curl -s -X POST "http://localhost:8094/mcp/v1/message?session_id=$SESSION_ID" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{\"jsonrpc\":\"2.0\",\"method\":\"tools/call\",\"params\":{\"name\":\"guardrail_team_status\",\"arguments\":{\"project_name\":\"$PROJECT_NAME\",\"phase\":\"Phase $FROM_PHASE\"}}}"
|
|
|
|
# Check phase gate requirements
|
|
echo "Checking phase gate requirements..."
|
|
curl -s -X POST "http://localhost:8094/mcp/v1/message?session_id=$SESSION_ID" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{\"jsonrpc\":\"2.0\",\"method\":\"tools/call\",\"params\":{\"name\":\"guardrail_phase_gate_check\",\"arguments\":{\"project_name\":\"$PROJECT_NAME\",\"from_phase\":$FROM_PHASE,\"to_phase\":$TO_PHASE}}}"
|
|
|
|
echo "Validation complete. Review output above before proceeding."
|
|
```
|
|
|
|
### Error Handling in Batch Operations
|
|
|
|
When performing batch operations, handle validation errors gracefully:
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
# batch_with_error_handling.sh
|
|
|
|
PROJECT_NAME="$1"
|
|
TEMP_DIR=$(mktemp -d)
|
|
FAILED_FILE="$TEMP_DIR/failed_assignments.txt"
|
|
SUCCESS_COUNT=0
|
|
FAILURE_COUNT=0
|
|
|
|
process_assignment() {
|
|
local team_id=$1
|
|
local role_name=$2
|
|
local person=$3
|
|
|
|
response=$(curl -s -X POST "http://localhost:8094/mcp/v1/message?session_id=$SESSION_ID" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{\"jsonrpc\":\"2.0\",\"method\":\"tools/call\",\"params\":{\"name\":\"guardrail_team_assign\",\"arguments\":{\"project_name\":\"$PROJECT_NAME\",\"team_id\":$team_id,\"role_name\":\"$role_name\",\"person\":\"$person\"}}}")
|
|
|
|
# Check if response indicates error
|
|
if echo "$response" | grep -q '"IsError":true'; then
|
|
echo "FAILED: $person as $role_name in Team $team_id"
|
|
echo "$team_id|$role_name|$person" >> "$FAILED_FILE"
|
|
((FAILURE_COUNT++))
|
|
return 1
|
|
else
|
|
echo "SUCCESS: $person as $role_name in Team $team_id"
|
|
((SUCCESS_COUNT++))
|
|
return 0
|
|
fi
|
|
}
|
|
|
|
# Process all assignments
|
|
# ... (assignment loop)
|
|
|
|
echo "---"
|
|
echo "Batch Operation Summary:"
|
|
echo " Successful: $SUCCESS_COUNT"
|
|
echo " Failed: $FAILURE_COUNT"
|
|
|
|
if [ $FAILURE_COUNT -gt 0 ]; then
|
|
echo "Failed assignments saved to: $FAILED_FILE"
|
|
echo "Review failures and retry if needed."
|
|
fi
|
|
```
|
|
|
|
---
|
|
|
|
## Related Documentation
|
|
|
|
- [TEAM_STRUCTURE.md](./TEAM_STRUCTURE.md) - Complete team structure and role definitions
|
|
- [../.guardrails/team-layout-rules.json](../.guardrails/team-layout-rules.json) - Machine-readable team layout rules
|
|
- [AGENT_GUARDRAILS.md](./AGENT_GUARDRAILS.md) - Core safety protocols for agents
|
|
|
|
---
|
|
|
|
**Last Updated:** 2026-02-15
|
|
**Version:** 1.0
|