Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
134 changes: 134 additions & 0 deletions .github/workflows/build-dxt-package.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
name: Build DXT Package

on:
workflow_dispatch:
inputs:
version:
description: 'Version for the DXT package'
required: false
default: 'latest'
type: string
attach_to_release:
description: 'Attach DXT to latest release'
required: false
default: false
type: boolean

permissions:
contents: write # Required for attaching to releases

jobs:
build-dxt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Set up Node.js for DXT CLI
uses: actions/setup-node@v4
with:
node-version: '20'

- name: Install DXT CLI
run: npm install -g @anthropic-ai/dxt

- name: Determine version
id: version
run: |
if [ "${{ github.event.inputs.version }}" = "latest" ]; then
# Get latest git tag, fallback to commit SHA
VERSION=$(git describe --tags --abbrev=0 2>/dev/null || echo "dev-$(git rev-parse --short HEAD)")
else
VERSION="${{ github.event.inputs.version }}"
fi
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "Using version: $VERSION"

- name: Create DXT manifest
run: |
cat > manifest.json << 'EOF'
{
"dxt_version": "0.1.1",
"name": "github-projects-mcp",
"version": "${{ steps.version.outputs.version }}",
"description": "A Model Context Protocol server for GitHub Projects",
"long_description": "This package provides a Model Context Protocol (MCP) server for managing GitHub Projects, allowing users to interact with GitHub Projects through a standardized API.",
"author": {
"name": "Red Duck Labs, LLC",
"email": "contact@redducklabs.com",
"url": "https://github.com/redducklabs"
},
"server": {
"type": "python",
"entry_point": "github_projects_mcp/server.py",
"mcp_config": {
"command": "python",
"args": ["-m", "github_projects_mcp.server"],
"env": {
"GITHUB_TOKEN": "${user_config.GITHUB_TOKEN}",
"API_MAX_RETRIES": "${user_config.API_MAX_RETRIES}",
"API_RETRY_DELAY": "${user_config.API_RETRY_DELAY}"
}
}
},
"user_config": {
"GITHUB_TOKEN": {
"title": "GitHub Token",
"type": "string",
"description": "GitHub Personal Access Token with project permissions",
"sensitive": true,
"required": true
},
"API_MAX_RETRIES": {
"title": "Max Retries",
"type": "string",
"description": "Maximum retries for rate-limited requests",
"default": "3"
},
"API_RETRY_DELAY": {
"title": "Retry Delay",
"type": "string",
"description": "Delay in seconds between retries",
"default": "60"
}
}
}
EOF

- name: Build DXT package
run: dxt pack

- name: List created DXT files
run: ls -la *.dxt

- name: Upload DXT package
uses: actions/upload-artifact@v4
with:
name: dxt-package-${{ steps.version.outputs.version }}
path: "*.dxt"
retention-days: 30

- name: Attach DXT to latest release
if: github.event.inputs.attach_to_release == 'true'
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ steps.version.outputs.version }}
files: "*.dxt"
make_latest: false

- name: Summary
run: |
echo "## DXT Package Built Successfully! 🎉" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Version:** ${{ steps.version.outputs.version }}" >> $GITHUB_STEP_SUMMARY
echo "**Package Name:** github-projects-mcp@${{ steps.version.outputs.version }}" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Files Created:" >> $GITHUB_STEP_SUMMARY
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
ls -la *.dxt >> $GITHUB_STEP_SUMMARY
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
if [ "${{ github.event.inputs.attach_to_release }}" = "true" ]; then
echo "✅ **DXT package attached to release ${{ steps.version.outputs.version }}**" >> $GITHUB_STEP_SUMMARY
else
echo "📦 **DXT package available as workflow artifact**" >> $GITHUB_STEP_SUMMARY
fi
61 changes: 0 additions & 61 deletions .github/workflows/publish-mcp-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,80 +29,19 @@ jobs:
with:
python-version: '3.10'

- name: Set up Node.js for DXT CLI
uses: actions/setup-node@v4
with:
node-version: '20'

- name: Install build dependencies
run: |
python -m pip install --upgrade pip
python -m pip install build
npm install -g @anthropic-ai/dxt

- name: Build Python package
run: python -m build

- name: Create DXT manifest
run: |
cat > manifest.json << 'EOF'
{
"dxt_version": "0.1.1",
"name": "github-projects-mcp",
"version": "${{ github.ref_name }}",
"description": "A Model Context Protocol server for GitHub Projects",
"long_description": "This package provides a Model Context Protocol (MCP) server for managing GitHub Projects, allowing users to interact with GitHub Projects through a standardized API.",
"author": {
"name": "Red Duck Labs, LLC",
"email": "contact@redducklabs.com",
"url": "https://github.com/redducklabs"
},
"server": {
"type": "python",
"entry_point": "github_projects_mcp/server.py",
"mcp_config": {
"command": "python",
"args": ["-m", "github_projects_mcp.server"]
}
},
"user_config": {
"GITHUB_TOKEN": {
"title": "GitHub Token",
"type": "string",
"description": "GitHub Personal Access Token with project permissions",
"sensitive": true,
"required": true
},
"API_MAX_RETRIES": {
"title": "Max Retries",
"type": "string",
"description": "Maximum retries for rate-limited requests",
"default": "3"
},
"API_RETRY_DELAY": {
"title": "Retry Delay",
"type": "string",
"description": "Delay in seconds between retries",
"default": "60"
}
}
}
EOF

- name: Build DXT package
run: dxt pack

- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: dist
path: dist/

- name: Upload DXT package
uses: actions/upload-artifact@v4
with:
name: dxt-package
path: "*.dxt"

publish:
needs: build
Expand Down
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# GitHub Projects MCP Server

[![GitHub Release](https://img.shields.io/github/v/release/redducklabs/github-projects-mcp?style=for-the-badge&color=blue)](https://github.com/redducklabs/github-projects-mcp/releases)
[![Download DXT](https://img.shields.io/badge/Download-DXT%20Package-purple?style=for-the-badge&logo=download)](https://github.com/redducklabs/github-projects-mcp/releases/latest/download/github-projects-mcp.dxt)
[![PyPI Version](https://img.shields.io/pypi/v/github-projects-mcp?style=for-the-badge&color=green)](https://pypi.org/project/github-projects-mcp/)

A Model Context Protocol (MCP) server that provides tools for interacting with GitHub Projects using GraphQL. This server exposes GitHub Projects functionality through standardized MCP tools that can be used by LLMs and other MCP clients.

## Features
Expand Down
Binary file added github-projects-mcp.dxt
Binary file not shown.
46 changes: 46 additions & 0 deletions manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
{
"dxt_version": "0.1.1",
"name": "github-projects-mcp",
"version": "1.0.0",
"description": "A Model Context Protocol server for GitHub Projects",
"long_description": "This package provides a Model Context Protocol (MCP) server for managing GitHub Projects, allowing users to interact with GitHub Projects through a standardized API.",
"author": {
"name": "Red Duck Labs, LLC",
"email": "contact@redducklabs.com",
"url": "https://github.com/redducklabs"
},
"server": {
"type": "python",
"entry_point": "github_projects_mcp/server.py",
"mcp_config": {
"command": "python",
"args": ["-m", "github_projects_mcp.server"],
"env": {
"GITHUB_TOKEN": "${user_config.GITHUB_TOKEN}",
"API_MAX_RETRIES": "${user_config.API_MAX_RETRIES}",
"API_RETRY_DELAY": "${user_config.API_RETRY_DELAY}"
}
}
},
"user_config": {
"GITHUB_TOKEN": {
"title": "GitHub Token",
"type": "string",
"description": "GitHub Personal Access Token with project permissions",
"sensitive": true,
"required": true
},
"API_MAX_RETRIES": {
"title": "Max Retries",
"type": "string",
"description": "Maximum retries for rate-limited requests",
"default": "3"
},
"API_RETRY_DELAY": {
"title": "Retry Delay",
"type": "string",
"description": "Delay in seconds between retries",
"default": "60"
}
}
}
Loading