diff --git a/.github/workflows/build-dxt-package.yml b/.github/workflows/build-dxt-package.yml new file mode 100644 index 0000000..b3c0ac9 --- /dev/null +++ b/.github/workflows/build-dxt-package.yml @@ -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 \ No newline at end of file diff --git a/.github/workflows/publish-mcp-package.yml b/.github/workflows/publish-mcp-package.yml index 3c4e13c..212bea2 100644 --- a/.github/workflows/publish-mcp-package.yml +++ b/.github/workflows/publish-mcp-package.yml @@ -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 diff --git a/README.md b/README.md index 5d687b3..0bb1287 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/github-projects-mcp.dxt b/github-projects-mcp.dxt new file mode 100644 index 0000000..35f63b2 Binary files /dev/null and b/github-projects-mcp.dxt differ diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..4f25b15 --- /dev/null +++ b/manifest.json @@ -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" + } + } +} \ No newline at end of file