Skip to content

Commit bb9f7d4

Browse files
committed
feat(scripts): add mcp-status.sh for multi-repository overview
Add script to provide overview of multiple MCP server repositories, showing git status, branches, and project information. Features: - Auto-discovers MCP servers in parent directory - Shows git branch and uncommitted changes - Indicates which servers have merge scripts installed - Displays project metrics like tool count - Helps manage multiple MCP projects
1 parent 8395024 commit bb9f7d4

File tree

1 file changed

+105
-0
lines changed

1 file changed

+105
-0
lines changed

scripts/mcp-status.sh

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
#!/bin/bash
2+
set -e
3+
4+
# Script to show status of all MCP servers in a directory
5+
# Usage: ./scripts/mcp-status.sh [directory]
6+
7+
# Color codes
8+
RED='\033[0;31m'
9+
GREEN='\033[0;32m'
10+
YELLOW='\033[1;33m'
11+
BLUE='\033[0;34m'
12+
CYAN='\033[0;36m'
13+
NC='\033[0m'
14+
15+
# Default to parent directory if not specified
16+
SEARCH_DIR="${1:-..}"
17+
18+
echo "MCP Server Status Report"
19+
echo "========================"
20+
echo ""
21+
echo -e "Searching in: ${BLUE}$SEARCH_DIR${NC}"
22+
echo ""
23+
24+
# Find all directories with package.json that look like MCP servers
25+
find "$SEARCH_DIR" -maxdepth 2 -name "package.json" -type f | sort | while read -r pkg_file; do
26+
dir=$(dirname "$pkg_file")
27+
dir_name=$(basename "$dir")
28+
29+
# Skip node_modules
30+
if [[ "$dir" == *"node_modules"* ]]; then
31+
continue
32+
fi
33+
34+
# Check if it's an MCP server (has @modelcontextprotocol dependency)
35+
if grep -q "@modelcontextprotocol" "$pkg_file" 2>/dev/null; then
36+
echo -e "${GREEN}━━━ $dir_name ━━━${NC}"
37+
38+
# Get package info
39+
name=$(grep '"name"' "$pkg_file" | head -1 | cut -d'"' -f4)
40+
version=$(grep '"version"' "$pkg_file" | head -1 | cut -d'"' -f4)
41+
description=$(grep '"description"' "$pkg_file" | head -1 | cut -d'"' -f4)
42+
43+
echo -e " Package: ${CYAN}$name@$version${NC}"
44+
echo -e " Description: $description"
45+
46+
# Check for scripts directory
47+
if [ -d "$dir/scripts" ]; then
48+
script_count=$(find "$dir/scripts" -name "*.sh" -type f | wc -l | tr -d ' ')
49+
echo -e " Scripts: ${GREEN}${NC} ($script_count scripts found)"
50+
else
51+
echo -e " Scripts: ${YELLOW}${NC} (no scripts directory)"
52+
fi
53+
54+
# Check git status if it's a git repo
55+
if [ -d "$dir/.git" ]; then
56+
cd "$dir"
57+
58+
# Get current branch
59+
branch=$(git branch --show-current 2>/dev/null || echo "unknown")
60+
echo -e " Git Branch: ${BLUE}$branch${NC}"
61+
62+
# Check for uncommitted changes
63+
if git diff-index --quiet HEAD -- 2>/dev/null; then
64+
echo -e " Git Status: ${GREEN}✓ Clean${NC}"
65+
else
66+
changes=$(git status --porcelain | wc -l | tr -d ' ')
67+
echo -e " Git Status: ${YELLOW}$changes uncommitted changes${NC}"
68+
fi
69+
70+
# Check for unpushed commits
71+
if [ "$branch" != "unknown" ]; then
72+
ahead=$(git rev-list --count @{u}..HEAD 2>/dev/null || echo "0")
73+
if [ "$ahead" -gt 0 ]; then
74+
echo -e " Unpushed: ${YELLOW}$ahead commits ahead${NC}"
75+
fi
76+
fi
77+
78+
cd - >/dev/null
79+
else
80+
echo -e " Git: ${RED}Not a git repository${NC}"
81+
fi
82+
83+
# Check last modified
84+
if [ -f "$dir/src/index.ts" ]; then
85+
if [[ "$OSTYPE" == "darwin"* ]]; then
86+
last_modified=$(stat -f "%Sm" -t "%Y-%m-%d %H:%M" "$dir/src/index.ts")
87+
else
88+
last_modified=$(stat -c "%y" "$dir/src/index.ts" | cut -d' ' -f1,2 | cut -d'.' -f1)
89+
fi
90+
echo -e " Last Modified: $last_modified"
91+
fi
92+
93+
# Count tools
94+
if [ -d "$dir/src/tools" ]; then
95+
tool_count=$(find "$dir/src/tools" -name "*.ts" -not -name "*.test.ts" -not -name "*.spec.ts" | wc -l | tr -d ' ')
96+
echo -e " Tools: $tool_count"
97+
fi
98+
99+
echo ""
100+
fi
101+
done
102+
103+
echo -e "${BLUE}Summary:${NC}"
104+
echo -e "Run ${CYAN}./scripts/install-scripts.sh <path>${NC} to add merge scripts to any MCP server"
105+
echo -e "Run ${CYAN}./scripts/analyze-template-diff.sh${NC} in any MCP server to check template differences"

0 commit comments

Comments
 (0)