6b3c375492
* Upgrade MCP Go SDK to v1.2.0-pre.1 and add Octicon icons to tools - Upgrade MCP Go SDK from v1.1.0 to v1.2.0-pre.1 for Icon support - Add Icon field to ToolsetMetadata for Octicon name assignment - Add OcticonURL() helper to generate CDN URLs for Octicon SVGs - Add Icons() method on ToolsetMetadata to generate MCP Icon objects - Apply icons automatically in RegisterFunc when tool is registered - Add icons to all 22 toolset metadata constants with appropriate Octicons - Update server.go to use new Capabilities API (fixes deprecation warnings) This demonstrates how the toolsets refactor makes adding new features simpler: icons are defined once in ToolsetMetadata and automatically applied to all tools in that toolset during registration. * Update third-party licenses for SDK upgrade * Address review feedback: enum size validation, mutation fix, tests - Replace runtime size validation with compile-time enum type (Size with SizeSM=16, SizeLG=24) - Fix RegisterFunc mutation by making shallow copy of tool before modifying Icons - Add comprehensive tests for octicons package (URL, Icons, Size constants) - Add toolsets tests for ToolsetMetadata.Icons(), RegisterFunc mutation prevention, and existing icon preservation - Improve icon choices for better visual semantics: - actions: play → workflow (more specific to GitHub Actions) - secret_protection: key → shield-lock (better represents protection) - gists: code → logo-gist (dedicated gist icon exists) * Add GitHub mark icon to server metadata Add the mark-github octicon to the server's Implementation struct so that MCP clients can display the GitHub logo for this server. The icon is provided in both 16x16 and 24x24 SVG sizes. * Fix rebase conflicts: use Registry methods and NullTranslationHelper - Remove duplicate old toolsets functions (AvailableToolsets, GetValidToolsetIDs, GetDefaultToolsetIDs) - Use Registry.AvailableToolsets() and Registry.HasToolset() instead - Replace stubTranslator with translations.NullTranslationHelper - Use new SDK Capabilities struct instead of deprecated HasTools/HasResources/HasPrompts - Add icon-related tests to registry_test.go * Use embedded data URIs for Octicon icons - Embed SVG icons using go:embed for offline use and faster loading - Convert icons to base64 data URIs at runtime - Fall back to CDN URL for non-embedded icons - Add test to verify all toolset icons are properly embedded - 44 SVG files (22 icons × 2 sizes) totaling ~27KB * Convert icons from SVG to PNG for MCP client compatibility MCP clients don't support SVG data URIs, so convert all embedded icons to PNG format using rsvg-convert. Changes: - Convert all 44 SVG icons to PNG format - Add 8 new icons: copilot, git-merge, repo-forked, star-fill - Update octicons.go to use PNG MIME type - Add script/fetch-icons for easy icon management - Update tests and toolsnaps for PNG format * Add mark-github icon for server metadata * Add light/dark theme icons for tools, resources, and prompts - Switch from size-based (16/24px) to theme-based (light/dark) icons - Use only 16x16 icons for smaller bundle size - Generate white (inverted) icons for dark theme backgrounds - Add icons to resources and prompts (auto-applied from toolset metadata) - Add 'file' icon for repository content resources - Update fetch-icons script to generate both theme variants * Use 24px icons with SVG fill modification for themes - Switch from 16px to 24px icons for better visibility - Use SVG fill attribute (#24292f for light, #ffffff for dark) instead of ImageMagick color inversion for cleaner theme variants - Remove ImageMagick dependency from fetch-icons script * Add specific icons for each repository resource type - repository_content: repo icon - repository_content_branch: git-branch icon - repository_content_commit: git-commit icon (new) - repository_content_tag: tag icon - repository_content_pr: git-pull-request icon Resources now have explicit icons set rather than relying on toolset fallback. * fix: restore Icon fields to toolset metadata and add icons to docs - Add Icon field to all ToolsetMetadata definitions (lost during rebase conflict resolution) - Update doc generator to include Octicon icons in toolsets table - Update doc generator to include icons in tool section headers - Use Primer Octicons CDN for GitHub markdown compatibility * feat: add icons to individual tools in documentation * fix: use repo-local icons with picture element for GitHub theme support - Reference icons from pkg/octicons/icons/ instead of external CDN - Use picture element with prefers-color-scheme for light/dark mode - GitHub markdown renderer will display these correctly * fix: remove redundant icons from individual tools Icons are kept on section headers and toolsets table only - having the same icon on every tool within a section was visually noisy and redundant. * Add icons to remote server toolsets documentation * Fix icon paths for docs/remote-server.md * Add remote-only toolsets with auto-generated documentation and icons guide - Add ToolsetMetadataCopilot, ToolsetMetadataCopilotSpaces, ToolsetMetadataSupportSearch - Add RemoteOnlyToolsets() function to return remote-only toolset metadata - Update doc generator to auto-generate remote-only toolsets table with icons - Create docs/toolsets-and-icons.md explaining how to add icons to toolsets - Add link to icons guide in CONTRIBUTING.md * Add icon validation tests and single source of truth for required icons - Add pkg/octicons/required_icons.txt as single source of truth for icons - Add RequiredIcons() function to read the required icons list - Update script/fetch-icons to read from required_icons.txt - Update octicons_test.go to use RequiredIcons() instead of hardcoded list - Add pkg/github/toolset_icons_test.go with: - TestAllToolsetIconsExist: validates all toolset icons are embedded - TestToolsetMetadataHasIcons: ensures all toolsets have icons set - Add 'book' icon for SupportSearch toolset - Update docs/toolsets-and-icons.md with fetch-icons and CI validation docs * fix: remove unused icon parameter from writeToolDoc - Remove unused 'icon' parameter from writeToolDoc function signature - Fix whitespace inconsistency in octicons_test.go - Fixes lint failure: unused-parameter revive error * fix: combine icon with name column in remote docs for proper table rendering - Move icon from separate column to Name column with <br> separator - Keep <picture> element for light/dark theme support - Remove empty icon column that was collapsing to zero width - Remove unused octiconSimpleImg function
73 lines
2.5 KiB
Bash
Executable File
73 lines
2.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# Fetch Octicon icons and convert them to PNG for embedding in the MCP server.
|
|
# Generates both light theme (dark icons) and dark theme (white icons) variants.
|
|
# Uses sed to modify SVG fill color before converting to PNG.
|
|
# Requires: rsvg-convert (from librsvg2-bin on Ubuntu/Debian)
|
|
#
|
|
# Usage:
|
|
# script/fetch-icons # Fetch all required icons
|
|
# script/fetch-icons icon1 icon2 # Fetch specific icons
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
ICONS_DIR="$REPO_ROOT/pkg/octicons/icons"
|
|
REQUIRED_ICONS_FILE="$REPO_ROOT/pkg/octicons/required_icons.txt"
|
|
OCTICONS_BASE="https://raw.githubusercontent.com/primer/octicons/main/icons"
|
|
|
|
# Check for rsvg-convert
|
|
if ! command -v rsvg-convert &> /dev/null; then
|
|
echo "Error: rsvg-convert not found. Install with:"
|
|
echo " Ubuntu/Debian: sudo apt-get install librsvg2-bin"
|
|
echo " macOS: brew install librsvg"
|
|
exit 1
|
|
fi
|
|
|
|
# Load icons from required_icons.txt or use command-line arguments
|
|
if [ $# -gt 0 ]; then
|
|
ICONS=("$@")
|
|
else
|
|
if [ ! -f "$REQUIRED_ICONS_FILE" ]; then
|
|
echo "Error: Required icons file not found: $REQUIRED_ICONS_FILE"
|
|
exit 1
|
|
fi
|
|
# Read icons from file, skipping comments and empty lines
|
|
mapfile -t ICONS < <(grep -v '^#' "$REQUIRED_ICONS_FILE" | grep -v '^$')
|
|
fi
|
|
|
|
# Ensure icons directory exists
|
|
mkdir -p "$ICONS_DIR"
|
|
|
|
echo "Fetching ${#ICONS[@]} icons (24px, light + dark themes)..."
|
|
|
|
for icon in "${ICONS[@]}"; do
|
|
svg_url="${OCTICONS_BASE}/${icon}-24.svg"
|
|
light_file="${ICONS_DIR}/${icon}-light.png"
|
|
dark_file="${ICONS_DIR}/${icon}-dark.png"
|
|
|
|
echo " ${icon} (light + dark)"
|
|
|
|
# Download SVG
|
|
svg_content=$(curl -sfL "$svg_url" 2>/dev/null) || {
|
|
echo " Warning: Failed to fetch ${icon}-24.svg (may not exist)"
|
|
continue
|
|
}
|
|
|
|
# Light theme: dark icons (#24292f) for light backgrounds
|
|
# Add fill attribute to the svg tag
|
|
light_svg=$(echo "$svg_content" | sed 's/<svg /<svg fill="#24292f" /')
|
|
echo "$light_svg" | rsvg-convert -o "$light_file"
|
|
|
|
# Dark theme: white icons (#ffffff) for dark backgrounds
|
|
dark_svg=$(echo "$svg_content" | sed 's/<svg /<svg fill="#ffffff" /')
|
|
echo "$dark_svg" | rsvg-convert -o "$dark_file"
|
|
done
|
|
|
|
echo "Done. Icons saved to $ICONS_DIR"
|
|
echo ""
|
|
echo "Next steps:"
|
|
echo " 1. Run 'go test ./pkg/octicons/...' to verify icons are embedded"
|
|
echo " 2. Run 'go test ./pkg/github/...' to verify toolset icons are valid"
|
|
echo " 3. Commit the new icon files"
|