This guide covers the GitHub Projects V2 capabilities added in v0.3.4, including project management, templates, and RAG-enhanced smart field assignment.
- π Overview
- π Prerequisites
- ποΈ Architecture
- π οΈ Configuration
- π Usage Examples
- π― Smart Field Assignment
- π API Reference
- π§ͺ Testing
- π Best Practices
- β Troubleshooting
The GitHub Projects V2 integration transforms project management with intelligent automation:
- Create projects with predefined templates (Roadmap, Bug Tracking, Feature Development)
- Manage project items with automatic field assignment
- Track project status and statistics
- Analyze issues using RAG to determine appropriate field values
- Automate tedious project management tasks
- Project Templates: Quick project setup with pre-configured fields
- Smart Field Assignment: RAG-powered analysis automatically sets field values
- GraphQL Integration: Full Projects V2 API support
- Field Type Support: Single-select, text, number, date, and iteration fields
- Error Handling: Comprehensive validation and user-friendly error messages
Your GitHub Personal Access Token (PAT) must have:
projectscope (for project operations)reposcope (for repository access)
Important: Use a Classic PAT, not Fine-Grained, for full Projects V2 support.
The Projects V2 integration requires:
pip install "gql[aiohttp]"This is already included in the standard installation.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β MCP Tools Layer β
β (github_create_project, etc.) β
βββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββΌββββββββββββββββββββββββββββββββ
β GitHubProjectsManager β
β (GraphQL Adapter Pattern) β
β β
β β’ Project CRUD operations β
β β’ Field management β
β β’ Smart issue analysis β
β β’ Template application β
βββββββββββββββ¬βββββββββββββββ¬βββββββββββββββ¬βββββββββ
β β β
GraphQL Client RAG Analysis GitHubClient
(gql) (Issue Analysis) (REST API)
Projects V2 requires GraphQL API:
- REST API: Issues, PRs, repositories (via PyGithub)
- GraphQL API: Projects V2, fields, views (via gql)
# Set your GitHub token with project scope
export GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx
# Or in .env file
GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxxIn config/server_config.json:
{
"github": {
"authentication": {
"token": "${GITHUB_TOKEN}"
},
"projects": {
"default_template": "bugs",
"auto_assign_fields": true,
"max_items_per_project": 1000
}
}
}# Via Claude Code (MCP)
"List my GitHub projects"
"Show all projects for organization myorg"
"List up to 50 projects for user ancoleman"
# Via HTTP API
# List projects for authenticated user
curl http://localhost:8081/github/projects
# List projects for specific owner
curl "http://localhost:8081/github/projects?owner=ancoleman"
# List with limit
curl "http://localhost:8081/github/projects?owner=myorg&limit=50"# Via Claude Code (MCP)
"Create a GitHub project called 'Q1 Roadmap' for owner ancoleman"
# Via HTTP API
curl -X POST http://localhost:8081/github/projects \
-H "Content-Type: application/json" \
-d '{
"owner": "ancoleman",
"title": "Q1 Roadmap"
}'# Via Claude Code
"Create a bug tracking project called 'Bug Tracker' using the bugs template"
# Via HTTP API
curl -X POST http://localhost:8081/github/projects \
-H "Content-Type: application/json" \
-d '{
"owner": "ancoleman",
"title": "Bug Tracker",
"template": "bugs"
}'- Bug Status: π New, π Triaged, π§ In Progress, π In Review, β Fixed, β Won't Fix
- Severity: π₯ Critical, π΄ High, π‘ Medium, π’ Low
- Component: π― Core, π Search, π Indexing, π API, π§© Integration, π Documentation
- Reproduction Steps: Text field
- Fix Version: Text field
- Progress: π Planned, π§ In Progress, β Completed, β Cancelled, βΈοΈ On Hold
- Priority: π₯ Critical, β High, π Medium, π Low
- Epic: ποΈ Foundation, π Enhancement, π Integration, β‘ Optimization, π Documentation
- Complexity: 1οΈβ£ Trivial to 5οΈβ£ Very Complex
- Target Version: Text field
- Due Date: Date field
- Stage: π‘ Ideation, π Planning, π οΈ Development, π§ͺ Testing, π Deployment, π Monitoring
- Effort: XS (<1 day) to XL (>2 weeks)
- Impact: π High, β Medium, β Low
- Dependencies: Text field
- Target Release: Text field
# Basic add
"Add issue #123 to project PVT_kwHOAdYevc4A7ABC"
# With smart field assignment
"Smart add issue #123 to project PVT_kwHOAdYevc4A7ABC"
# HTTP API
curl -X POST http://localhost:8081/github/projects/items/smart \
-H "Content-Type: application/json" \
-d '{
"project_id": "PVT_kwHOAdYevc4A7ABC",
"issue_number": 123
}'# Via Claude Code
"Update project item PVTI_xxxx field Status to 'In Progress'"
# HTTP API
curl -X POST http://localhost:8081/github/projects/items/update \
-H "Content-Type: application/json" \
-d '{
"project_id": "PVT_xxxx",
"item_id": "PVTI_xxxx",
"field_updates": {
"Status": "47fc9ee4",
"Priority": "high"
}
}'# Via Claude Code
"Get status for project #5 owned by ancoleman"
# HTTP API
curl http://localhost:8081/github/projects/ancoleman/5/status
# Response includes:
{
"project": {
"id": "PVT_xxxx",
"title": "Bug Tracker",
"url": "https://github.com/users/ancoleman/projects/5"
},
"statistics": {
"total_items": 42,
"issues": {
"open": 30,
"closed": 12
},
"completion_rate": 28.6
},
"fields": [...]
}The most powerful feature is RAG-enhanced field assignment that analyzes issue content to automatically set appropriate field values.
- Issue Analysis: Examines title, body, and labels
- Field Detection: Identifies relevant project fields
- Value Matching: Uses RAG and keyword analysis to determine values
- Automatic Assignment: Sets fields based on confidence levels
Issue: "Critical: Application crashes on startup"
Labels: ["bug", "critical", "blocking"]
Analysis Result:
- Severity: π₯ Critical (high confidence)
- Bug Status: π New
- Component: π― Core
Issue: "Search results are inconsistent"
Body: "The search functionality returns different results..."
Analysis Result:
- Component: π Search (high confidence)
- Severity: π‘ Medium
Issue: "Add dark mode support"
Labels: ["enhancement", "ui"]
Analysis Result:
- Type: β¨ Enhancement
- Impact: π High
- Stage: π‘ Ideation
- Single Select: Automatically matches option based on keywords
- Text: Extracts relevant content (e.g., reproduction steps)
- Number: Parses numeric values from content
- Date: Extracts dates in various formats
List GitHub Projects V2 for a user or organization.
Parameters:
owner(optional): Username or organization (defaults to current repo owner or authenticated user)limit(optional): Maximum number of projects (default: 20, max: 100)
Returns:
projects: List of projects with:id: Project node IDnumber: Project numbertitle: Project namedescription: Project descriptionurl: Web URLitem_count: Number of items in projectcreated_at: Creation timestampupdated_at: Last update timestamp
Create a new GitHub Project V2.
Parameters:
owner(required): Username or organizationtitle(required): Project titletemplate(optional): Template name (bugs, roadmap, features)
Returns:
project: Created project with ID and URLfields: List of fields (if template used)
Delete a GitHub Project V2.
Parameters:
project_id(required): Project node ID (must start with PVT_)
Returns:
deleted: Boolean indicating successtitle: Name of the deleted projectmessage: Confirmation message
Note: This action cannot be undone. All project data, including items and fields, will be permanently deleted.
Add an issue or PR to a project.
Parameters:
project_id(required): Project ID (PVT_xxxx format)issue_numberorpr_number(required): Item to add
Returns:
item: Added item with ID
Update field values for a project item.
Parameters:
project_id(required): Project IDitem_id(required): Item IDfield_updates(required): Dictionary of field:value pairs
Get project statistics and field information.
Parameters:
owner(required): Project ownernumber(required): Project number
Returns:
project: Project informationstatistics: Item counts and completion ratefields: Available fields with options
Create a filtered view in a project.
Parameters:
project_id(required): Project IDname(required): View namefilter(optional): Filter expressionsort(optional): Sort configuration
Add item with intelligent field assignment.
Parameters:
project_id(required): Project IDissue_number(required): Issue number
Returns:
item: Added itemapplied_fields: Fields that were setsuggestions: All suggested values
| Endpoint | Method | Purpose |
|---|---|---|
/github/projects |
GET | List projects |
/github/projects |
POST | Create project |
/github/projects/{owner}/{number} |
GET | Get project |
/github/projects/{project_id} |
DELETE | Delete project |
/github/projects/items |
POST | Add item |
/github/projects/items/update |
POST | Update item |
/github/projects/items/smart |
POST | Smart add |
/github/projects/{owner}/{number}/status |
GET | Get status |
/github/projects/views |
POST | Create view |
Use the provided test script:
# Run all project tests
./tests/integration/github/test_github_projects_http_api.sh
# Test smart add functionality
./tests/integration/github/test_github_projects_smart_add.sh- List existing projects:
# List all projects for current user
curl http://localhost:8081/github/projects
# List projects for specific owner
curl "http://localhost:8081/github/projects?owner=ancoleman&limit=10"- Create a test project:
curl -X POST http://localhost:8081/github/projects \
-d '{"owner": "ancoleman", "title": "Test Project", "template": "bugs"}'- Create test issues:
curl -X POST http://localhost:8081/github/issues \
-d '{"title": "Critical bug", "labels": ["bug", "critical"]}'- Smart add to project:
curl -X POST http://localhost:8081/github/projects/items/smart \
-d '{"project_id": "PVT_xxxx", "issue_number": 1}'- Check results:
curl http://localhost:8081/github/projects/ancoleman/1/status- Delete test project (cleanup):
# First get the project ID
curl http://localhost:8081/github/projects/ancoleman/1 | jq '.project.id'
# Then delete the project
curl -X DELETE http://localhost:8081/github/projects/PVT_xxxxWhen cleaning up projects:
# Via Claude Code MCP
"Delete project PVT_kwDOBxxx"
# Via HTTP API
curl -X DELETE http://localhost:8081/github/projects/PVT_kwDOBxxxImportant considerations:
- Deletion is permanent and cannot be undone
- All project items, fields, and views are deleted
- Consider archiving projects instead if you might need them later
- Requires appropriate permissions (project admin)
- Use templates for consistent field structure
- Name projects clearly with purpose and timeframe
- Limit items per project to maintain performance
- Archive completed projects to reduce clutter
- Delete test projects to keep workspace clean
- Keep field names short but descriptive
- Use emojis for visual distinction
- Limit select options to 6-8 for usability
- Include "Other" option for flexibility
- Use descriptive issue titles for better analysis
- Apply consistent labels for accurate classification
- Include keywords in issue body for field detection
- Review assignments before finalizing
- Check for existing items before adding
- Validate field IDs before updates
- Handle GraphQL errors gracefully
- Log operations for debugging
- Cause: Token missing
projectscope - Solution: Create Classic PAT with project scope
- Cause: Using reserved names like "Status"
- Solution: Use alternative names (e.g., "Task Status")
- Cause: Wrong owner or project number
- Solution: Verify owner name and project exists
- Cause: Wrong issue/PR node ID format
- Solution: Ensure IDs start with I_ or PR_
Enable debug logging:
export QDRANT_LOG_LEVEL=DEBUGCheck logs for GraphQL queries:
./scripts/qdrant-logs | grep ">>>"Projects V2 uses GraphQL rate limiting:
- Limit: 5,000 points per hour
- Project creation: ~50 points
- Field updates: ~10 points
- Queries: ~1-5 points
- GitHub Integration Guide - Issue management features
- Complete Setup Guide - Installation and configuration
- GitHub Workflow Examples - Real-world patterns
- Advanced RAG Implementation Roadmap - Future features
For GitHub Projects integration issues:
- Verify token has
projectscope - Check GraphQL query logs
- Review error messages for field names
- File issue with reproduction steps
Planned improvements:
- Project templates marketplace
- Bulk operations support
- Cross-project item linking
- Advanced automation rules
- Project insights and analytics
- AI-powered project planning