configs-all 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. package/.claude/settings.local.json +3 -0
  2. package/CLAUDE.md +94 -0
  3. package/README.md +424 -0
  4. package/TERMINAL_SHORTCUTS.md +96 -0
  5. package/WINDOWS_COMPATIBILITY.md +85 -0
  6. package/WINDOWS_MCP_SETUP.md +133 -0
  7. package/apps/RectangleConfig.plist +0 -0
  8. package/apps/Synergy +84 -0
  9. package/apps/iStat Menus Settings.ismp7 +0 -0
  10. package/claude/CLAUDE.md +228 -0
  11. package/claude/commands/changelog.md +36 -0
  12. package/claude/commands/commit.md +29 -0
  13. package/claude/commands/context.md +112 -0
  14. package/claude/commands/dash.md +37 -0
  15. package/claude/commands/deploy-check.md +37 -0
  16. package/claude/commands/deps.md +26 -0
  17. package/claude/commands/duplo.md +56 -0
  18. package/claude/commands/explain.md +43 -0
  19. package/claude/commands/fix-and-test.md +46 -0
  20. package/claude/commands/game-debug.md +66 -0
  21. package/claude/commands/games.md +53 -0
  22. package/claude/commands/go.md +147 -0
  23. package/claude/commands/guard.md +102 -0
  24. package/claude/commands/handoff.md +66 -0
  25. package/claude/commands/incident.md +144 -0
  26. package/claude/commands/init.md +78 -0
  27. package/claude/commands/k8s-debug.md +31 -0
  28. package/claude/commands/lint.md +27 -0
  29. package/claude/commands/merge-all.md +115 -0
  30. package/claude/commands/merge.md +129 -0
  31. package/claude/commands/mikpc.md +54 -0
  32. package/claude/commands/morning.md +72 -0
  33. package/claude/commands/partymode.md +105 -0
  34. package/claude/commands/plans.md +88 -0
  35. package/claude/commands/pr.md +41 -0
  36. package/claude/commands/prep.md +132 -0
  37. package/claude/commands/push-sync.md +82 -0
  38. package/claude/commands/push.md +34 -0
  39. package/claude/commands/research.md +73 -0
  40. package/claude/commands/retro.md +95 -0
  41. package/claude/commands/review-pr.md +96 -0
  42. package/claude/commands/review.md +41 -0
  43. package/claude/commands/scaffold-agent.md +45 -0
  44. package/claude/commands/setup.md +92 -0
  45. package/claude/commands/ship-prod.md +97 -0
  46. package/claude/commands/ship.md +82 -0
  47. package/claude/commands/simplify.md +42 -0
  48. package/claude/commands/spike.md +110 -0
  49. package/claude/commands/status.md +37 -0
  50. package/claude/commands/sync.md +72 -0
  51. package/claude/commands/test.md +29 -0
  52. package/claude/commands/triage.md +72 -0
  53. package/claude/desktop/claude_desktop_config.json +9 -0
  54. package/claude/hooks.json +15 -0
  55. package/claude/mcp-servers.duplo.json +8 -0
  56. package/claude/mcp-servers.json +62 -0
  57. package/claude/scripts/psdebug.ps1 +7 -0
  58. package/claude/settings.json +38 -0
  59. package/claude/settings.local.json +4 -0
  60. package/claude/statusline-command.sh +94 -0
  61. package/claude/templates/CLAUDE-k8s-devops.md +58 -0
  62. package/claude/templates/CLAUDE-python-agent.md +47 -0
  63. package/claude/templates/CLAUDE-typescript-frontend.md +50 -0
  64. package/docker/ai-stack/docker-compose.yml +76 -0
  65. package/docker/ai-stack/searxng/limiter.toml +3 -0
  66. package/docker/ai-stack/searxng/settings.yml +39 -0
  67. package/docker/cli/config.json.template +15 -0
  68. package/docker/cli/daemon.json +9 -0
  69. package/docker/cli/features.json +3 -0
  70. package/docker/mcp/catalog.json +9 -0
  71. package/docker/mcp/catalogs/docker-mcp.yaml +15107 -0
  72. package/docker/mcp/config.yaml +0 -0
  73. package/docker/mcp/registry.yaml +37 -0
  74. package/docker/mcp/tools.yaml +0 -0
  75. package/docs/context/.gitkeep +0 -0
  76. package/docs/context/2026-03-02-configs.md +142 -0
  77. package/docs/handoff/.gitkeep +0 -0
  78. package/docs/incidents/.gitkeep +0 -0
  79. package/docs/plans/2026-02-28-autonomous-command-suite-design.md +250 -0
  80. package/docs/plans/2026-02-28-autonomous-command-suite.md +682 -0
  81. package/docs/plans/2026-03-01-ai-stack-split-architecture.md +72 -0
  82. package/docs/plans/2026-03-02-ai-stack-expansion.md +33 -0
  83. package/docs/plans/2026-03-02-merge-commands-design.md +58 -0
  84. package/docs/plans/2026-03-02-merge-commands.md +354 -0
  85. package/docs/research/.gitkeep +0 -0
  86. package/docs/research/2026-03-02-configs-repo-architecture.md +152 -0
  87. package/docs/retros/.gitkeep +0 -0
  88. package/docs/retros/2026-03-01-ai-stack-split-architecture.md +38 -0
  89. package/docs/spikes/.gitkeep +0 -0
  90. package/gh/config.yml +16 -0
  91. package/gh/hosts.yml +5 -0
  92. package/gh/main.json +103 -0
  93. package/ghostty/config +90 -0
  94. package/git/config/base.gitconfig +46 -0
  95. package/git/config/chiefmikey.gitconfig +11 -0
  96. package/git/config/personal.gitconfig +10 -0
  97. package/git/config/work.gitconfig +14 -0
  98. package/ide/cursor/extensions.txt +111 -0
  99. package/ide/cursor/keybindings.json +307 -0
  100. package/ide/cursor/mcp.json +92 -0
  101. package/ide/cursor/settings.json +544 -0
  102. package/ide/vscode/extensions.txt +120 -0
  103. package/ide/vscode/insiders/extensions.txt +119 -0
  104. package/ide/vscode/insiders/keybindings.json +294 -0
  105. package/ide/vscode/insiders/settings.json +518 -0
  106. package/ide/vscode/keybindings.json +294 -0
  107. package/ide/vscode/settings.json +526 -0
  108. package/ide/vscode/vscode/extensions.txt +43 -0
  109. package/iterm/Mikey Pro.json +951 -0
  110. package/iterm/com.googlecode.iterm2.plist +5549 -0
  111. package/iterm/font/MesloLGS NF Bold Italic.ttf +0 -0
  112. package/iterm/font/MesloLGS NF Bold.ttf +0 -0
  113. package/iterm/font/MesloLGS NF Italic.ttf +0 -0
  114. package/iterm/font/MesloLGS NF Regular.ttf +0 -0
  115. package/package.json +15 -0
  116. package/scripts/ai/deploy-ai-stack.sh +119 -0
  117. package/scripts/ai/fix-ai-proxy.service +12 -0
  118. package/scripts/ai/fix-ai-proxy.sh +25 -0
  119. package/scripts/brew/search/brew-search-results.sh +19 -0
  120. package/scripts/brew/search/brew-search.sh +34 -0
  121. package/scripts/brew/upgrade/brew-upgrade-autoupdate.sh +5 -0
  122. package/scripts/brew/upgrade/brew-upgrade-full-auto.sh +89 -0
  123. package/scripts/brew/upgrade/brew-upgrade-full.sh +159 -0
  124. package/scripts/docker/cleanup/docker-cleanup-manage.sh +163 -0
  125. package/scripts/docker/cleanup/docker-cleanup.cron +12 -0
  126. package/scripts/docker/cleanup/docker-cleanup.sh +280 -0
  127. package/scripts/docker/install/README.md +23 -0
  128. package/scripts/docker/install/docker-al2.sh +7 -0
  129. package/scripts/docker/install/docker-compose-al2.sh +15 -0
  130. package/scripts/gh/auth/auth.sh +12 -0
  131. package/scripts/gh/config/gh-config.sh +3 -0
  132. package/scripts/gh/gist/gh-gist-create.sh +29 -0
  133. package/scripts/gh/gist/gh-gist-delete.sh +1 -0
  134. package/scripts/gh/gist/gh-gist-edit.sh +8 -0
  135. package/scripts/gh/gpg-key/gh-gpg-key-add.sh +3 -0
  136. package/scripts/gh/install/install.sh +7 -0
  137. package/scripts/gh/label/gh-label-clone.sh +0 -0
  138. package/scripts/gh/label/gh-label-create.sh +0 -0
  139. package/scripts/gh/label/gh-label-delete.sh +0 -0
  140. package/scripts/gh/label/gh-label-edit.sh +0 -0
  141. package/scripts/gh/label/gh-label-list.sh +0 -0
  142. package/scripts/gh/secret/gh-secret-delete.sh +24 -0
  143. package/scripts/gh/secret/gh-secret-set.sh +70 -0
  144. package/scripts/gh/ssh-key/gh-ssh-key-add.sh +8 -0
  145. package/scripts/git/add/git-add.sh +3 -0
  146. package/scripts/git/auth/README.md +11 -0
  147. package/scripts/git/auth/https.sh +20 -0
  148. package/scripts/git/auth/ssh-mac.sh +41 -0
  149. package/scripts/git/branch-delete/git-branch-delete.sh +16 -0
  150. package/scripts/git/checkout/git-checkout-stash.sh +32 -0
  151. package/scripts/git/temp/git-temp-pull.sh +6 -0
  152. package/scripts/git/temp/git-temp-push.sh +5 -0
  153. package/scripts/install/fresh.zsh +34 -0
  154. package/scripts/install/full-install.zsh +193 -0
  155. package/scripts/linux/codedeploy/README.md +19 -0
  156. package/scripts/linux/codedeploy/linux-codedeploy-al2.sh +13 -0
  157. package/scripts/linux/codedeploy/linux-codedeploy-index.sh +16 -0
  158. package/scripts/linux/codedeploy/linux-codedeploy-ubuntu.sh +14 -0
  159. package/scripts/linux/coredns/README.md +17 -0
  160. package/scripts/linux/coredns/linux-coredns-al2.sh +29 -0
  161. package/scripts/linux/wifi/01-netconf.yaml +21 -0
  162. package/scripts/linux/wifi/wifi-ubuntu.sh +17 -0
  163. package/scripts/mac/dock-sort/mac-dock-sort.sh +87 -0
  164. package/scripts/mac/dropbox-ignore/mac-dropbox-ignore.sh +12 -0
  165. package/scripts/mac/sudo-askpass/mac-sudo-askpass.sh +50 -0
  166. package/scripts/mac/sudo-askpass/setup-sudo-password.sh +49 -0
  167. package/scripts/mac/upgrade/mac-upgrade.sh +21 -0
  168. package/scripts/mac/vpn/mac-vpn.sh +4 -0
  169. package/scripts/mcp/aws-mcp-wrapper.ps1 +97 -0
  170. package/scripts/mcp/aws-mcp-wrapper.sh +53 -0
  171. package/scripts/mcp/duplo-mcp-wrapper.sh +31 -0
  172. package/scripts/mcp/filesystem-mcp-wrapper.ps1 +43 -0
  173. package/scripts/mcp/filesystem-mcp-wrapper.sh +34 -0
  174. package/scripts/mcp/git-mcp-wrapper.ps1 +42 -0
  175. package/scripts/mcp/git-mcp-wrapper.sh +33 -0
  176. package/scripts/mcp/github-mcp-wrapper.ps1 +43 -0
  177. package/scripts/mcp/github-mcp-wrapper.sh +19 -0
  178. package/scripts/mcp/kubernetes-mcp-wrapper.ps1 +22 -0
  179. package/scripts/mcp/kubernetes-mcp-wrapper.sh +16 -0
  180. package/scripts/mcp/mcp-launcher.ps1 +56 -0
  181. package/scripts/mcp/mcp-launcher.sh +71 -0
  182. package/scripts/mcp/mongodb-mcp-wrapper.ps1 +26 -0
  183. package/scripts/mcp/mongodb-mcp-wrapper.sh +17 -0
  184. package/scripts/mcp/notion-mcp-wrapper.ps1 +23 -0
  185. package/scripts/mcp/notion-mcp-wrapper.sh +14 -0
  186. package/scripts/mcp/postgres-mcp-wrapper.ps1 +23 -0
  187. package/scripts/mcp/postgres-mcp-wrapper.sh +16 -0
  188. package/scripts/npm/ncu/npm-ncu.sh +24 -0
  189. package/scripts/npm/upgrade/npm-upgrade.sh +51 -0
  190. package/scripts/qmk/build_reviung41.sh +28 -0
  191. package/scripts/qmk/sync_unicorne.sh +44 -0
  192. package/scripts/sync/README.md +64 -0
  193. package/scripts/sync/config-common.zsh +882 -0
  194. package/scripts/sync/pull-configs.ps1 +33 -0
  195. package/scripts/sync/pull-configs.zsh +278 -0
  196. package/scripts/sync/push-configs.ps1 +91 -0
  197. package/scripts/sync/push-configs.zsh +384 -0
  198. package/shell/alias/alias-d.zsh +333 -0
  199. package/shell/alias/alias.zsh +36 -0
  200. package/shell/alias/categories/development.zsh +157 -0
  201. package/shell/alias/categories/environment.zsh +13 -0
  202. package/shell/alias/categories/git.zsh +40 -0
  203. package/shell/alias/categories/github-functions.zsh +459 -0
  204. package/shell/alias/categories/network.zsh +46 -0
  205. package/shell/alias/categories/path.zsh +46 -0
  206. package/shell/alias/categories/system.zsh +78 -0
  207. package/shell/alias/categories/wolfe-server.zsh +11 -0
  208. package/shell/powershell/Microsoft.PowerShell_profile.ps1 +208 -0
  209. package/shell/zsh/.p10k.zsh +1832 -0
  210. package/shell/zsh/.zshrc +87 -0
  211. package/shell/zsh/config/completion.zsh +31 -0
  212. package/shell/zsh/config/functions.zsh +31 -0
  213. package/shell/zsh/config/keybindings.zsh +13 -0
  214. package/shell/zsh/config/options.zsh +56 -0
  215. package/shell/zsh/config/plugins.zsh +83 -0
  216. package/shell/zsh/config/variables.zsh +191 -0
  217. package/shell/zsh/powerlevel10k.zsh-theme +83 -0
  218. package/shell/zsh/zsh-autosuggestions.zsh +871 -0
  219. package/ssh/config +46 -0
  220. package/ssh/config.duplo +21 -0
  221. package/ssh/config.mikpc +35 -0
  222. package/ssh/personal_signing.pub +1 -0
  223. package/templates/.envrc.example +34 -0
  224. package/templates/.envrc.quickstart +17 -0
  225. package/wezterm/wezterm.lua +249 -0
  226. package/wsl/.wslconfig +3 -0
  227. package/wsl/wsl.conf +18 -0
@@ -0,0 +1,97 @@
1
+ # AWS MCP Server Wrapper (PowerShell)
2
+ # Prioritizes AWS_PROFILE (for Duplo JIT credentials) over direct AWS credentials
3
+ # Sources $env:USERPROFILE\.secrets and AWS config, then runs AWS MCP server
4
+
5
+ function Write-ErrLine {
6
+ param([Parameter(Mandatory = $true)][string]$Message)
7
+ [Console]::Error.WriteLine($Message)
8
+ }
9
+
10
+ function Resolve-UvCommand {
11
+ # Prefer PATH resolution first
12
+ $uv = Get-Command uv -ErrorAction SilentlyContinue
13
+ if ($uv) { return @($uv.Source, @()) }
14
+
15
+ $uvx = Get-Command uvx -ErrorAction SilentlyContinue
16
+ if ($uvx) { return @($uvx.Source, @()) }
17
+
18
+ # Common Windows install locations (pip --user, pip system, rust/cargo)
19
+ $candidatePaths = @(
20
+ # pip --user typically ends up under %APPDATA%\Python\Python3xx\Scripts
21
+ (Join-Path $env:APPDATA "Python\Python*\Scripts\uv.exe"),
22
+ (Join-Path $env:APPDATA "Python\Python*\Scripts\uvx.exe"),
23
+ # Some Python installs place scripts under %LOCALAPPDATA%\Programs\Python\Python3xx\Scripts
24
+ (Join-Path $env:LOCALAPPDATA "Programs\Python\Python*\Scripts\uv.exe"),
25
+ (Join-Path $env:LOCALAPPDATA "Programs\Python\Python*\Scripts\uvx.exe"),
26
+ # cargo install locations
27
+ (Join-Path $env:USERPROFILE ".cargo\bin\uv.exe"),
28
+ (Join-Path $env:USERPROFILE ".cargo\bin\uvx.exe"),
29
+ (Join-Path $env:USERPROFILE ".local\bin\uv.exe"),
30
+ (Join-Path $env:USERPROFILE ".local\bin\uvx.exe")
31
+ ) | Where-Object { $_ -and $_.Trim() -ne "" }
32
+
33
+ foreach ($pattern in $candidatePaths) {
34
+ $match = Get-ChildItem -Path $pattern -File -ErrorAction SilentlyContinue | Select-Object -First 1
35
+ if ($match) { return @($match.FullName, @()) }
36
+ }
37
+
38
+ return $null
39
+ }
40
+
41
+ # Load secrets from .secrets file if it exists
42
+ $secretsFile = Join-Path $env:USERPROFILE ".secrets"
43
+ if (Test-Path $secretsFile) {
44
+ Get-Content $secretsFile | ForEach-Object {
45
+ if ($_ -match '^\s*([^#][^=]+)=(.*)$') {
46
+ $key = $matches[1].Trim()
47
+ $value = $matches[2].Trim()
48
+ [Environment]::SetEnvironmentVariable($key, $value, "Process")
49
+ }
50
+ }
51
+ }
52
+
53
+ # Load repo-specific secrets if available (from direnv .envrc)
54
+ $repoSecretsFile = Join-Path (Get-Location) ".secrets"
55
+ if (Test-Path $repoSecretsFile) {
56
+ Get-Content $repoSecretsFile | ForEach-Object {
57
+ if ($_ -match '^\s*([^#][^=]+)=(.*)$') {
58
+ $key = $matches[1].Trim()
59
+ $value = $matches[2].Trim()
60
+ [Environment]::SetEnvironmentVariable($key, $value, "Process")
61
+ }
62
+ }
63
+ }
64
+
65
+ # Priority: AWS_PROFILE first (for Duplo JIT), then fallback to direct credentials
66
+ # Only set default profile if no profile is set AND no direct credentials exist
67
+ if (-not $env:AWS_PROFILE) {
68
+ # No profile set - check if we have direct credentials
69
+ if (-not $env:AWS_ACCESS_KEY_ID -and -not $env:AWS_SECRET_ACCESS_KEY) {
70
+ # No profile and no credentials - use default profile
71
+ $env:AWS_PROFILE = "default"
72
+ }
73
+ # If direct credentials exist, let AWS SDK use them (don't set profile)
74
+ }
75
+
76
+ # Set region (can be overridden by direnv)
77
+ if (-not $env:AWS_REGION) {
78
+ $env:AWS_REGION = "us-east-2"
79
+ }
80
+
81
+ # Resolve uv/uvx command (must avoid printing non-JSON to stdout)
82
+ $cmd = Resolve-UvCommand
83
+ if (-not $cmd) {
84
+ Write-ErrLine "Error: Neither uv nor uvx found in PATH (or common locations)."
85
+ Write-ErrLine "Fix: install uv (recommended) and ensure it's on PATH, then restart Cursor."
86
+ Write-ErrLine "Example: py -m pip install --user uv"
87
+ exit 1
88
+ }
89
+
90
+ # Use uv tool run (preferred). If the resolved command is uvx.exe, use uvx invocation.
91
+ $cmdPath = $cmd[0]
92
+ $exeName = [System.IO.Path]::GetFileName($cmdPath).ToLowerInvariant()
93
+ if ($exeName -eq "uvx.exe") {
94
+ & $cmdPath "awslabs.core-mcp-server@latest" @args
95
+ } else {
96
+ & $cmdPath tool run --from "awslabs.core-mcp-server@latest" "awslabs.core-mcp-server" @args
97
+ }
@@ -0,0 +1,53 @@
1
+ #!/bin/zsh
2
+
3
+ # AWS MCP Server Wrapper
4
+ # Prioritizes AWS_PROFILE (for Duplo JIT credentials) over direct AWS credentials
5
+ # Sources ~/.secrets and AWS config, then runs AWS MCP server
6
+
7
+ # Source secrets if available
8
+ if [[ -f "${HOME}/.secrets" ]]; then
9
+ source "${HOME}/.secrets"
10
+ fi
11
+
12
+ # Source repo-specific secrets if available (from direnv .envrc)
13
+ if [[ -f "${PWD}/.secrets" ]]; then
14
+ source "${PWD}/.secrets"
15
+ fi
16
+
17
+ # Priority: AWS_PROFILE first (for Duplo JIT), then fallback to direct credentials
18
+ # Only set default profile if no profile is set AND no direct credentials exist
19
+ if [[ -z "${AWS_PROFILE:-}" ]]; then
20
+ # No profile set - check if we have direct credentials
21
+ if [[ -z "${AWS_ACCESS_KEY_ID:-}" ]] && [[ -z "${AWS_SECRET_ACCESS_KEY:-}" ]]; then
22
+ # No profile and no credentials - use default profile
23
+ export AWS_PROFILE="default"
24
+ fi
25
+ # If direct credentials exist, let AWS SDK use them (don't set profile)
26
+ fi
27
+
28
+ # Set region (can be overridden by direnv)
29
+ export AWS_REGION="${AWS_REGION:-us-east-2}"
30
+
31
+ # Use uv tool run (confirmed working)
32
+ if command -v uv >/dev/null 2>&1; then
33
+ exec uv tool run --from awslabs.core-mcp-server@latest awslabs.core-mcp-server
34
+ # Fallback to uvx
35
+ elif command -v uvx >/dev/null 2>&1; then
36
+ exec uvx awslabs.core-mcp-server@latest
37
+ else
38
+ # Fallback to pip-installed console script if available
39
+ if command -v awslabs.core-mcp-server >/dev/null 2>&1; then
40
+ exec awslabs.core-mcp-server
41
+ fi
42
+
43
+ # Fallback to python -m (for user/venv installs)
44
+ if command -v python3 >/dev/null 2>&1; then
45
+ exec python3 -m awslabs.core_mcp_server
46
+ fi
47
+
48
+ echo "Error: AWS MCP requires one of: uv/uvx, awslabs.core-mcp-server (pip), or python3 module install." >&2
49
+ echo "Install options:" >&2
50
+ echo " - brew install uv" >&2
51
+ echo " - python3 -m pip install --user awslabs.core-mcp-server" >&2
52
+ exit 1
53
+ fi
@@ -0,0 +1,31 @@
1
+ #!/bin/sh
2
+
3
+ # Duplo Cloud MCP Server Wrapper
4
+ # Picks up DUPLO_HOST, DUPLO_TOKEN, DUPLO_TENANT from env (set by direnv, shell, or ~/.secrets)
5
+
6
+ # Ensure common bin paths are available (MCP servers run with minimal PATH)
7
+ export PATH="/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin:${PATH}"
8
+
9
+ # Source secrets if available (fallback for vars not already in env)
10
+ if [ -f "${HOME}/.secrets" ]; then
11
+ . "${HOME}/.secrets"
12
+ fi
13
+
14
+ # Validate required vars
15
+ missing=""
16
+ [ -z "${DUPLO_HOST}" ] && missing="${missing} DUPLO_HOST"
17
+ [ -z "${DUPLO_TOKEN}" ] && missing="${missing} DUPLO_TOKEN"
18
+ [ -z "${DUPLO_TENANT}" ] && missing="${missing} DUPLO_TENANT"
19
+
20
+ if [ -n "${missing}" ]; then
21
+ echo "Error: Missing Duplo env vars:${missing}" >&2
22
+ echo "Set them via direnv, shell env, or ~/.secrets" >&2
23
+ exit 1
24
+ fi
25
+
26
+ exec docker run --rm -i \
27
+ -e "DUPLO_HOST=${DUPLO_HOST}" \
28
+ -e "DUPLO_TOKEN=${DUPLO_TOKEN}" \
29
+ -e "DUPLO_TENANT=${DUPLO_TENANT}" \
30
+ duplocloud/mcp:latest \
31
+ duplocloud-mcp --transport stdio
@@ -0,0 +1,43 @@
1
+ # Filesystem MCP Server Wrapper (PowerShell)
2
+ # Picks a sane Dropbox "dev root" across machines, then runs the filesystem MCP.
3
+
4
+ $ErrorActionPreference = "Stop"
5
+
6
+ function Resolve-FsRoot {
7
+ # NOTE: PowerShell variables are case-insensitive; avoid $home which conflicts with read-only $HOME.
8
+ $userHome = $env:USERPROFILE
9
+ $candidates = @(
10
+ (Join-Path $userHome "Dropbox\duplo\dev\chiefmikey"),
11
+ (Join-Path $userHome "Dropbox\dev"),
12
+ (Join-Path $userHome "Dropbox\mikbook\dev"),
13
+ (Join-Path $userHome "Dropbox\mikpc\dev"),
14
+ (Join-Path $userHome "Dropbox")
15
+ )
16
+
17
+ foreach ($d in $candidates) {
18
+ if (Test-Path $d) { return $d }
19
+ }
20
+
21
+ throw "could not resolve a filesystem root under $userHome\Dropbox"
22
+ }
23
+
24
+ function Resolve-Npx {
25
+ # NOTE: PowerShell variables are case-insensitive; avoid $home which conflicts with read-only $HOME.
26
+ $userHome = $env:USERPROFILE
27
+ $candidates = @(
28
+ "C:\Program Files\nodejs\npx.cmd",
29
+ (Join-Path $userHome "AppData\Roaming\npm\npx.cmd")
30
+ )
31
+
32
+ foreach ($p in $candidates) {
33
+ if (Test-Path $p) { return $p }
34
+ }
35
+
36
+ return "npx"
37
+ }
38
+
39
+ $root = Resolve-FsRoot
40
+ $npx = Resolve-Npx
41
+
42
+ & $npx -y "@modelcontextprotocol/server-filesystem" $root
43
+
@@ -0,0 +1,34 @@
1
+ #!/bin/zsh
2
+
3
+ # Filesystem MCP Server Wrapper
4
+ # Picks a sane Dropbox "dev root" across machines, then runs the filesystem MCP.
5
+
6
+ set -euo pipefail
7
+
8
+ resolve_fs_root() {
9
+ local candidates=(
10
+ "${HOME}/Dropbox/duplo/dev/chiefmikey"
11
+ "${HOME}/Dropbox/dev"
12
+ "${HOME}/Dropbox/mikbook/dev"
13
+ "${HOME}/Dropbox/mikpc/dev"
14
+ "${HOME}/Dropbox"
15
+ )
16
+
17
+ local d
18
+ for d in "${candidates[@]}"; do
19
+ if [[ -d "$d" ]]; then
20
+ echo "$d"
21
+ return 0
22
+ fi
23
+ done
24
+
25
+ return 1
26
+ }
27
+
28
+ ROOT="$(resolve_fs_root)" || {
29
+ echo "Error: could not resolve a filesystem root under ${HOME}/Dropbox" >&2
30
+ exit 1
31
+ }
32
+
33
+ exec npx -y @modelcontextprotocol/server-filesystem "$ROOT"
34
+
@@ -0,0 +1,42 @@
1
+ # Git MCP Server Wrapper (PowerShell)
2
+ # Selects a per-machine configs repo as the git root, then runs git MCP.
3
+
4
+ $ErrorActionPreference = "Stop"
5
+
6
+ function Resolve-GitRoot {
7
+ # NOTE: PowerShell variables are case-insensitive; avoid $home which conflicts with read-only $HOME.
8
+ $userHome = $env:USERPROFILE
9
+ $candidates = @(
10
+ (Join-Path $userHome "Dropbox\duplo\dev\chiefmikey\configs"),
11
+ (Join-Path $userHome "Dropbox\dev\configs"),
12
+ (Join-Path $userHome "Dropbox\mikbook\dev\configs"),
13
+ (Join-Path $userHome "Dropbox\mikpc\dev\configs")
14
+ )
15
+
16
+ foreach ($d in $candidates) {
17
+ if (Test-Path (Join-Path $d ".git")) { return $d }
18
+ }
19
+
20
+ throw "could not resolve a git repo under $userHome\Dropbox\*\dev\*\configs"
21
+ }
22
+
23
+ function Resolve-Npx {
24
+ # NOTE: PowerShell variables are case-insensitive; avoid $home which conflicts with read-only $HOME.
25
+ $userHome = $env:USERPROFILE
26
+ $candidates = @(
27
+ "C:\Program Files\nodejs\npx.cmd",
28
+ (Join-Path $userHome "AppData\Roaming\npm\npx.cmd")
29
+ )
30
+
31
+ foreach ($p in $candidates) {
32
+ if (Test-Path $p) { return $p }
33
+ }
34
+
35
+ return "npx"
36
+ }
37
+
38
+ $root = Resolve-GitRoot
39
+ $npx = Resolve-Npx
40
+
41
+ & $npx -y "@cyanheads/git-mcp-server" --repository $root
42
+
@@ -0,0 +1,33 @@
1
+ #!/bin/zsh
2
+
3
+ # Git MCP Server Wrapper
4
+ # Selects a per-machine configs repo as the git root, then runs git MCP.
5
+
6
+ set -euo pipefail
7
+
8
+ resolve_git_root() {
9
+ local candidates=(
10
+ "${HOME}/Dropbox/duplo/dev/chiefmikey/configs"
11
+ "${HOME}/Dropbox/dev/configs"
12
+ "${HOME}/Dropbox/mikbook/dev/configs"
13
+ "${HOME}/Dropbox/mikpc/dev/configs"
14
+ )
15
+
16
+ local d
17
+ for d in "${candidates[@]}"; do
18
+ if [[ -d "$d/.git" ]]; then
19
+ echo "$d"
20
+ return 0
21
+ fi
22
+ done
23
+
24
+ return 1
25
+ }
26
+
27
+ ROOT="$(resolve_git_root)" || {
28
+ echo "Error: could not resolve a git repo under ${HOME}/Dropbox/*/dev/*/configs" >&2
29
+ exit 1
30
+ }
31
+
32
+ exec npx -y @cyanheads/git-mcp-server --repository "$ROOT"
33
+
@@ -0,0 +1,43 @@
1
+ # GitHub MCP Server Wrapper (PowerShell)
2
+ # Sources $env:USERPROFILE\.secrets to get GITHUB_PAT and runs via npx
3
+
4
+ function Write-ErrLine {
5
+ param([Parameter(Mandatory = $true)][string]$Message)
6
+ [Console]::Error.WriteLine($Message)
7
+ }
8
+
9
+ # Load secrets from .secrets file if it exists
10
+ $secretsFile = Join-Path $env:USERPROFILE ".secrets"
11
+ if (Test-Path $secretsFile) {
12
+ Get-Content $secretsFile | ForEach-Object {
13
+ $line = $_
14
+ if (-not $line) { return }
15
+ if ($line.Trim().StartsWith("#")) { return }
16
+
17
+ # Support common .env variants:
18
+ # - optional BOM at start of file
19
+ # - optional 'export '
20
+ # - optional whitespace around '='
21
+ # - optional quoting around values
22
+ if ($line -match '^\s*(?:export\s+)?([^=]+?)\s*=\s*(.*)\s*$') {
23
+ $key = $matches[1].Trim().TrimStart([char]0xFEFF)
24
+ $value = $matches[2].Trim()
25
+ if (($value.StartsWith('"') -and $value.EndsWith('"')) -or ($value.StartsWith("'") -and $value.EndsWith("'"))) {
26
+ $value = $value.Substring(1, $value.Length - 2)
27
+ }
28
+ [Environment]::SetEnvironmentVariable($key, $value, "Process")
29
+ }
30
+ }
31
+ }
32
+
33
+ # Get token from environment (set from .secrets or existing env var)
34
+ $token = $env:GITHUB_PAT
35
+ if (-not $token) {
36
+ Write-ErrLine "Error: GITHUB_PAT not found in .secrets or environment."
37
+ Write-ErrLine "Fix: add GITHUB_PAT=... to $env:USERPROFILE\.secrets and restart Cursor."
38
+ exit 1
39
+ }
40
+
41
+ # Run GitHub MCP server with token (stdio transport required)
42
+ $env:GITHUB_PERSONAL_ACCESS_TOKEN = $token
43
+ & npx -y @modelcontextprotocol/server-github @args
@@ -0,0 +1,19 @@
1
+ #!/bin/sh
2
+
3
+ # GitHub MCP Server Wrapper
4
+ # Sources ~/.secrets to get GITHUB_PAT and runs via npx
5
+
6
+ # Source secrets if available
7
+ if [ -f "${HOME}/.secrets" ]; then
8
+ . "${HOME}/.secrets"
9
+ fi
10
+
11
+ # Ensure token exists (avoid printing non-JSON to stdout)
12
+ if [ -z "${GITHUB_PAT}" ]; then
13
+ echo "Error: GITHUB_PAT not found in ~/.secrets or environment." >&2
14
+ exit 1
15
+ fi
16
+
17
+ # Run GitHub MCP server with token from environment (stdio transport required)
18
+ export GITHUB_PERSONAL_ACCESS_TOKEN="${GITHUB_PAT}"
19
+ exec npx -y @modelcontextprotocol/server-github "$@"
@@ -0,0 +1,22 @@
1
+ # Kubernetes MCP Server Wrapper (PowerShell)
2
+ # Sources $env:USERPROFILE\.secrets and respects KUBECONFIG environment variable for per-repo configs
3
+
4
+ # Source secrets if available
5
+ if (Test-Path "$env:USERPROFILE\.secrets") {
6
+ Get-Content "$env:USERPROFILE\.secrets" | ForEach-Object {
7
+ if ($_ -match '^([^#][^=]+)=(.*)$') {
8
+ $name = $matches[1].Trim()
9
+ $value = $matches[2].Trim()
10
+ [Environment]::SetEnvironmentVariable($name, $value, "Process")
11
+ }
12
+ }
13
+ }
14
+
15
+ # Use KUBECONFIG from environment if set (allows per-repo configs via direnv)
16
+ # If not set, defaults to ~/.kube/config
17
+ if (-not $env:KUBECONFIG) {
18
+ $env:KUBECONFIG = "$env:USERPROFILE\.kube\config"
19
+ }
20
+
21
+ # Run Kubernetes MCP server
22
+ npx -y kubernetes-mcp-server@latest
@@ -0,0 +1,16 @@
1
+ #!/bin/zsh
2
+
3
+ # Kubernetes MCP Server Wrapper
4
+ # Sources ~/.secrets and respects KUBECONFIG environment variable for per-repo configs
5
+
6
+ # Source secrets if available
7
+ if [[ -f "${HOME}/.secrets" ]]; then
8
+ source "${HOME}/.secrets"
9
+ fi
10
+
11
+ # Use KUBECONFIG from environment if set (allows per-repo configs via direnv)
12
+ # If not set, defaults to ~/.kube/config
13
+ export KUBECONFIG="${KUBECONFIG:-${HOME}/.kube/config}"
14
+
15
+ # Run Kubernetes MCP server
16
+ exec npx -y kubernetes-mcp-server@latest
@@ -0,0 +1,56 @@
1
+ # MCP Launcher (PowerShell)
2
+ # Resolves CONFIG_DIR dynamically and launches MCP wrapper scripts
3
+ # Usage: mcp-launcher.ps1 <wrapper-script-name>
4
+ # Example: .\mcp-launcher.ps1 aws-mcp-wrapper.ps1
5
+
6
+ $ErrorActionPreference = "Stop"
7
+
8
+ function Resolve-ConfigDir {
9
+ # Allow explicit override
10
+ if ($env:CONFIG_DIR -and (Test-Path (Join-Path $env:CONFIG_DIR "scripts\mcp"))) {
11
+ return $env:CONFIG_DIR
12
+ }
13
+
14
+ # Prefer resolving from this script's location when running from the repo
15
+ # Repo layout: <CONFIG_DIR>\scripts\mcp\mcp-launcher.ps1
16
+ $scriptDir = $PSScriptRoot
17
+ if ($scriptDir) {
18
+ $potential = Resolve-Path (Join-Path $scriptDir "..\..") | Select-Object -ExpandProperty Path
19
+ if (Test-Path (Join-Path $potential "scripts\mcp")) {
20
+ return $potential
21
+ }
22
+ }
23
+
24
+ # Fall back to known locations
25
+ # NOTE: PowerShell variables are case-insensitive; avoid $home which conflicts with read-only $HOME.
26
+ $userHome = $env:USERPROFILE
27
+ $candidates = @(
28
+ (Join-Path $userHome "Dropbox\mikpc\dev\configs"),
29
+ (Join-Path $userHome "Dropbox\dev\configs"),
30
+ (Join-Path $userHome "Dropbox\duplo\dev\chiefmikey\configs"),
31
+ (Join-Path $userHome "Dropbox\mikbook\dev\configs")
32
+ )
33
+
34
+ foreach ($d in $candidates) {
35
+ if (Test-Path (Join-Path $d "scripts\mcp")) {
36
+ return $d
37
+ }
38
+ }
39
+
40
+ throw "Could not resolve CONFIG_DIR (set CONFIG_DIR env var or install configs repo in a known location)."
41
+ }
42
+
43
+ $wrapperScript = $args[0]
44
+ if (-not $wrapperScript) {
45
+ throw "No wrapper script specified"
46
+ }
47
+
48
+ $configDir = Resolve-ConfigDir
49
+ $wrapperPath = Join-Path (Join-Path $configDir "scripts\mcp") $wrapperScript
50
+
51
+ if (-not (Test-Path $wrapperPath)) {
52
+ throw "Wrapper script not found: $wrapperPath"
53
+ }
54
+
55
+ # Execute
56
+ & $wrapperPath
@@ -0,0 +1,71 @@
1
+ #!/bin/zsh
2
+
3
+ # MCP Launcher - Resolves CONFIG_DIR dynamically and launches MCP wrapper scripts
4
+ # Usage: mcp-launcher.sh <wrapper-script-name>
5
+ # Example: mcp-launcher.sh aws-mcp-wrapper.sh
6
+
7
+ set -euo pipefail
8
+
9
+ resolve_config_dir() {
10
+ # Allow explicit override
11
+ if [[ -n "${CONFIG_DIR:-}" ]] && [[ -d "${CONFIG_DIR}/scripts/mcp" ]]; then
12
+ echo "${CONFIG_DIR}"
13
+ return 0
14
+ fi
15
+
16
+ # Prefer resolving from this script's location when running from the repo
17
+ # Repo layout: <CONFIG_DIR>/scripts/mcp/mcp-launcher.sh
18
+ local script_dir potential
19
+ script_dir="$(cd "$(dirname "$0")" && pwd)"
20
+ potential="$(cd "${script_dir}/../.." && pwd)"
21
+ if [[ -d "${potential}/scripts/mcp" ]]; then
22
+ echo "${potential}"
23
+ return 0
24
+ fi
25
+
26
+ # Fall back to known locations (multi-machine friendly)
27
+ local candidates=(
28
+ "${HOME}/Dropbox/duplo/dev/chiefmikey/configs"
29
+ "${HOME}/Dropbox/dev/configs"
30
+ "${HOME}/Dropbox/mikbook/dev/configs"
31
+ "${HOME}/Dropbox/mikpc/dev/configs"
32
+ )
33
+ local d
34
+ for d in "${candidates[@]}"; do
35
+ if [[ -d "${d}/scripts/mcp" ]]; then
36
+ echo "${d}"
37
+ return 0
38
+ fi
39
+ done
40
+
41
+ return 1
42
+ }
43
+
44
+ CONFIG_DIR="$(resolve_config_dir)" || {
45
+ echo "Error: Could not resolve CONFIG_DIR (set CONFIG_DIR env var or install configs repo in a known location)." >&2
46
+ exit 1
47
+ }
48
+
49
+ # Get the wrapper script name from arguments
50
+ WRAPPER_SCRIPT="${1:-}"
51
+
52
+ if [[ -z "$WRAPPER_SCRIPT" ]]; then
53
+ echo "Error: No wrapper script specified" >&2
54
+ exit 1
55
+ fi
56
+
57
+ # Resolve the full path to the wrapper script
58
+ WRAPPER_PATH="${CONFIG_DIR}/scripts/mcp/${WRAPPER_SCRIPT}"
59
+
60
+ if [[ ! -f "$WRAPPER_PATH" ]]; then
61
+ echo "Error: Wrapper script not found: $WRAPPER_PATH" >&2
62
+ exit 1
63
+ fi
64
+
65
+ # Make sure it's executable
66
+ if [[ ! -x "$WRAPPER_PATH" ]]; then
67
+ chmod +x "$WRAPPER_PATH"
68
+ fi
69
+
70
+ # Execute the wrapper script
71
+ exec "$WRAPPER_PATH"
@@ -0,0 +1,26 @@
1
+ # MongoDB MCP Server Wrapper (PowerShell)
2
+ # Sources $env:USERPROFILE\.secrets to get MONGODB_CONNECTION_STRING and MONGODB_DATABASE if available
3
+ # Falls back to defaults if not set
4
+
5
+ # Load secrets from .secrets file if it exists
6
+ $secretsFile = Join-Path $env:USERPROFILE ".secrets"
7
+ if (Test-Path $secretsFile) {
8
+ Get-Content $secretsFile | ForEach-Object {
9
+ if ($_ -match '^\s*([^#][^=]+)=(.*)$') {
10
+ $key = $matches[1].Trim()
11
+ $value = $matches[2].Trim()
12
+ [Environment]::SetEnvironmentVariable($key, $value, "Process")
13
+ }
14
+ }
15
+ }
16
+
17
+ # Use values from .secrets, or defaults
18
+ if (-not $env:MONGODB_CONNECTION_STRING) {
19
+ $env:MONGODB_CONNECTION_STRING = "mongodb://localhost:27017"
20
+ }
21
+ if (-not $env:MONGODB_DATABASE) {
22
+ $env:MONGODB_DATABASE = "devopsmgr"
23
+ }
24
+
25
+ # Run MongoDB MCP server
26
+ npx -y @mongodb-js/mongodb-mcp-server
@@ -0,0 +1,17 @@
1
+ #!/bin/zsh
2
+
3
+ # MongoDB MCP Server Wrapper
4
+ # Sources ~/.secrets to get MONGODB_CONNECTION_STRING and MONGODB_DATABASE if available
5
+ # Falls back to defaults if not set
6
+
7
+ # Source secrets if available
8
+ if [[ -f "${HOME}/.secrets" ]]; then
9
+ source "${HOME}/.secrets"
10
+ fi
11
+
12
+ # Use values from .secrets, or defaults
13
+ export MONGODB_CONNECTION_STRING="${MONGODB_CONNECTION_STRING:-mongodb://localhost:27017}"
14
+ export MONGODB_DATABASE="${MONGODB_DATABASE:-devopsmgr}"
15
+
16
+ # Run MongoDB MCP server
17
+ exec npx -y @mongodb-js/mongodb-mcp-server
@@ -0,0 +1,23 @@
1
+ # Notion MCP Server Wrapper (PowerShell)
2
+ # Sources $env:USERPROFILE\.secrets to get INTERNAL_INTEGRATION_TOKEN and passes it to Docker container
3
+
4
+ # Load secrets from .secrets file if it exists
5
+ $secretsFile = Join-Path $env:USERPROFILE ".secrets"
6
+ if (Test-Path $secretsFile) {
7
+ Get-Content $secretsFile | ForEach-Object {
8
+ if ($_ -match '^\s*([^#][^=]+)=(.*)$') {
9
+ $key = $matches[1].Trim()
10
+ $value = $matches[2].Trim()
11
+ [Environment]::SetEnvironmentVariable($key, $value, "Process")
12
+ }
13
+ }
14
+ }
15
+
16
+ # Get token from environment (set from .secrets or existing env var)
17
+ $token = $env:INTERNAL_INTEGRATION_TOKEN
18
+ if (-not $token) {
19
+ Write-Host "Warning: INTERNAL_INTEGRATION_TOKEN not found in .secrets or environment" -ForegroundColor Yellow
20
+ }
21
+
22
+ # Run Notion MCP server with token
23
+ docker run -i --rm -e "INTERNAL_INTEGRATION_TOKEN=$token" mcp/notion
@@ -0,0 +1,14 @@
1
+ #!/bin/zsh
2
+
3
+ # Notion MCP Server Wrapper
4
+ # Sources ~/.secrets to get INTERNAL_INTEGRATION_TOKEN and passes it to Docker container
5
+
6
+ # Source secrets if available
7
+ if [[ -f "${HOME}/.secrets" ]]; then
8
+ source "${HOME}/.secrets"
9
+ fi
10
+
11
+ # Run Notion MCP server with token from environment
12
+ exec docker run -i --rm \
13
+ -e "INTERNAL_INTEGRATION_TOKEN=${INTERNAL_INTEGRATION_TOKEN}" \
14
+ mcp/notion
@@ -0,0 +1,23 @@
1
+ # Postgres MCP Server Wrapper (PowerShell)
2
+ # Sources $env:USERPROFILE\.secrets to get POSTGRES_CONNECTION_STRING if available
3
+ # Falls back to default if not set
4
+
5
+ # Load secrets from .secrets file if it exists
6
+ $secretsFile = Join-Path $env:USERPROFILE ".secrets"
7
+ if (Test-Path $secretsFile) {
8
+ Get-Content $secretsFile | ForEach-Object {
9
+ if ($_ -match '^\s*([^#][^=]+)=(.*)$') {
10
+ $key = $matches[1].Trim()
11
+ $value = $matches[2].Trim()
12
+ [Environment]::SetEnvironmentVariable($key, $value, "Process")
13
+ }
14
+ }
15
+ }
16
+
17
+ # Use POSTGRES_CONNECTION_STRING from .secrets, or default
18
+ if (-not $env:POSTGRES_CONNECTION_STRING) {
19
+ $env:POSTGRES_CONNECTION_STRING = "postgresql://localhost:5432/postgres"
20
+ }
21
+
22
+ # Run Postgres MCP server
23
+ npx -y @modelcontextprotocol/server-postgres