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.
- package/.claude/settings.local.json +3 -0
- package/CLAUDE.md +94 -0
- package/README.md +424 -0
- package/TERMINAL_SHORTCUTS.md +96 -0
- package/WINDOWS_COMPATIBILITY.md +85 -0
- package/WINDOWS_MCP_SETUP.md +133 -0
- package/apps/RectangleConfig.plist +0 -0
- package/apps/Synergy +84 -0
- package/apps/iStat Menus Settings.ismp7 +0 -0
- package/claude/CLAUDE.md +228 -0
- package/claude/commands/changelog.md +36 -0
- package/claude/commands/commit.md +29 -0
- package/claude/commands/context.md +112 -0
- package/claude/commands/dash.md +37 -0
- package/claude/commands/deploy-check.md +37 -0
- package/claude/commands/deps.md +26 -0
- package/claude/commands/duplo.md +56 -0
- package/claude/commands/explain.md +43 -0
- package/claude/commands/fix-and-test.md +46 -0
- package/claude/commands/game-debug.md +66 -0
- package/claude/commands/games.md +53 -0
- package/claude/commands/go.md +147 -0
- package/claude/commands/guard.md +102 -0
- package/claude/commands/handoff.md +66 -0
- package/claude/commands/incident.md +144 -0
- package/claude/commands/init.md +78 -0
- package/claude/commands/k8s-debug.md +31 -0
- package/claude/commands/lint.md +27 -0
- package/claude/commands/merge-all.md +115 -0
- package/claude/commands/merge.md +129 -0
- package/claude/commands/mikpc.md +54 -0
- package/claude/commands/morning.md +72 -0
- package/claude/commands/partymode.md +105 -0
- package/claude/commands/plans.md +88 -0
- package/claude/commands/pr.md +41 -0
- package/claude/commands/prep.md +132 -0
- package/claude/commands/push-sync.md +82 -0
- package/claude/commands/push.md +34 -0
- package/claude/commands/research.md +73 -0
- package/claude/commands/retro.md +95 -0
- package/claude/commands/review-pr.md +96 -0
- package/claude/commands/review.md +41 -0
- package/claude/commands/scaffold-agent.md +45 -0
- package/claude/commands/setup.md +92 -0
- package/claude/commands/ship-prod.md +97 -0
- package/claude/commands/ship.md +82 -0
- package/claude/commands/simplify.md +42 -0
- package/claude/commands/spike.md +110 -0
- package/claude/commands/status.md +37 -0
- package/claude/commands/sync.md +72 -0
- package/claude/commands/test.md +29 -0
- package/claude/commands/triage.md +72 -0
- package/claude/desktop/claude_desktop_config.json +9 -0
- package/claude/hooks.json +15 -0
- package/claude/mcp-servers.duplo.json +8 -0
- package/claude/mcp-servers.json +62 -0
- package/claude/scripts/psdebug.ps1 +7 -0
- package/claude/settings.json +38 -0
- package/claude/settings.local.json +4 -0
- package/claude/statusline-command.sh +94 -0
- package/claude/templates/CLAUDE-k8s-devops.md +58 -0
- package/claude/templates/CLAUDE-python-agent.md +47 -0
- package/claude/templates/CLAUDE-typescript-frontend.md +50 -0
- package/docker/ai-stack/docker-compose.yml +76 -0
- package/docker/ai-stack/searxng/limiter.toml +3 -0
- package/docker/ai-stack/searxng/settings.yml +39 -0
- package/docker/cli/config.json.template +15 -0
- package/docker/cli/daemon.json +9 -0
- package/docker/cli/features.json +3 -0
- package/docker/mcp/catalog.json +9 -0
- package/docker/mcp/catalogs/docker-mcp.yaml +15107 -0
- package/docker/mcp/config.yaml +0 -0
- package/docker/mcp/registry.yaml +37 -0
- package/docker/mcp/tools.yaml +0 -0
- package/docs/context/.gitkeep +0 -0
- package/docs/context/2026-03-02-configs.md +142 -0
- package/docs/handoff/.gitkeep +0 -0
- package/docs/incidents/.gitkeep +0 -0
- package/docs/plans/2026-02-28-autonomous-command-suite-design.md +250 -0
- package/docs/plans/2026-02-28-autonomous-command-suite.md +682 -0
- package/docs/plans/2026-03-01-ai-stack-split-architecture.md +72 -0
- package/docs/plans/2026-03-02-ai-stack-expansion.md +33 -0
- package/docs/plans/2026-03-02-merge-commands-design.md +58 -0
- package/docs/plans/2026-03-02-merge-commands.md +354 -0
- package/docs/research/.gitkeep +0 -0
- package/docs/research/2026-03-02-configs-repo-architecture.md +152 -0
- package/docs/retros/.gitkeep +0 -0
- package/docs/retros/2026-03-01-ai-stack-split-architecture.md +38 -0
- package/docs/spikes/.gitkeep +0 -0
- package/gh/config.yml +16 -0
- package/gh/hosts.yml +5 -0
- package/gh/main.json +103 -0
- package/ghostty/config +90 -0
- package/git/config/base.gitconfig +46 -0
- package/git/config/chiefmikey.gitconfig +11 -0
- package/git/config/personal.gitconfig +10 -0
- package/git/config/work.gitconfig +14 -0
- package/ide/cursor/extensions.txt +111 -0
- package/ide/cursor/keybindings.json +307 -0
- package/ide/cursor/mcp.json +92 -0
- package/ide/cursor/settings.json +544 -0
- package/ide/vscode/extensions.txt +120 -0
- package/ide/vscode/insiders/extensions.txt +119 -0
- package/ide/vscode/insiders/keybindings.json +294 -0
- package/ide/vscode/insiders/settings.json +518 -0
- package/ide/vscode/keybindings.json +294 -0
- package/ide/vscode/settings.json +526 -0
- package/ide/vscode/vscode/extensions.txt +43 -0
- package/iterm/Mikey Pro.json +951 -0
- package/iterm/com.googlecode.iterm2.plist +5549 -0
- package/iterm/font/MesloLGS NF Bold Italic.ttf +0 -0
- package/iterm/font/MesloLGS NF Bold.ttf +0 -0
- package/iterm/font/MesloLGS NF Italic.ttf +0 -0
- package/iterm/font/MesloLGS NF Regular.ttf +0 -0
- package/package.json +15 -0
- package/scripts/ai/deploy-ai-stack.sh +119 -0
- package/scripts/ai/fix-ai-proxy.service +12 -0
- package/scripts/ai/fix-ai-proxy.sh +25 -0
- package/scripts/brew/search/brew-search-results.sh +19 -0
- package/scripts/brew/search/brew-search.sh +34 -0
- package/scripts/brew/upgrade/brew-upgrade-autoupdate.sh +5 -0
- package/scripts/brew/upgrade/brew-upgrade-full-auto.sh +89 -0
- package/scripts/brew/upgrade/brew-upgrade-full.sh +159 -0
- package/scripts/docker/cleanup/docker-cleanup-manage.sh +163 -0
- package/scripts/docker/cleanup/docker-cleanup.cron +12 -0
- package/scripts/docker/cleanup/docker-cleanup.sh +280 -0
- package/scripts/docker/install/README.md +23 -0
- package/scripts/docker/install/docker-al2.sh +7 -0
- package/scripts/docker/install/docker-compose-al2.sh +15 -0
- package/scripts/gh/auth/auth.sh +12 -0
- package/scripts/gh/config/gh-config.sh +3 -0
- package/scripts/gh/gist/gh-gist-create.sh +29 -0
- package/scripts/gh/gist/gh-gist-delete.sh +1 -0
- package/scripts/gh/gist/gh-gist-edit.sh +8 -0
- package/scripts/gh/gpg-key/gh-gpg-key-add.sh +3 -0
- package/scripts/gh/install/install.sh +7 -0
- package/scripts/gh/label/gh-label-clone.sh +0 -0
- package/scripts/gh/label/gh-label-create.sh +0 -0
- package/scripts/gh/label/gh-label-delete.sh +0 -0
- package/scripts/gh/label/gh-label-edit.sh +0 -0
- package/scripts/gh/label/gh-label-list.sh +0 -0
- package/scripts/gh/secret/gh-secret-delete.sh +24 -0
- package/scripts/gh/secret/gh-secret-set.sh +70 -0
- package/scripts/gh/ssh-key/gh-ssh-key-add.sh +8 -0
- package/scripts/git/add/git-add.sh +3 -0
- package/scripts/git/auth/README.md +11 -0
- package/scripts/git/auth/https.sh +20 -0
- package/scripts/git/auth/ssh-mac.sh +41 -0
- package/scripts/git/branch-delete/git-branch-delete.sh +16 -0
- package/scripts/git/checkout/git-checkout-stash.sh +32 -0
- package/scripts/git/temp/git-temp-pull.sh +6 -0
- package/scripts/git/temp/git-temp-push.sh +5 -0
- package/scripts/install/fresh.zsh +34 -0
- package/scripts/install/full-install.zsh +193 -0
- package/scripts/linux/codedeploy/README.md +19 -0
- package/scripts/linux/codedeploy/linux-codedeploy-al2.sh +13 -0
- package/scripts/linux/codedeploy/linux-codedeploy-index.sh +16 -0
- package/scripts/linux/codedeploy/linux-codedeploy-ubuntu.sh +14 -0
- package/scripts/linux/coredns/README.md +17 -0
- package/scripts/linux/coredns/linux-coredns-al2.sh +29 -0
- package/scripts/linux/wifi/01-netconf.yaml +21 -0
- package/scripts/linux/wifi/wifi-ubuntu.sh +17 -0
- package/scripts/mac/dock-sort/mac-dock-sort.sh +87 -0
- package/scripts/mac/dropbox-ignore/mac-dropbox-ignore.sh +12 -0
- package/scripts/mac/sudo-askpass/mac-sudo-askpass.sh +50 -0
- package/scripts/mac/sudo-askpass/setup-sudo-password.sh +49 -0
- package/scripts/mac/upgrade/mac-upgrade.sh +21 -0
- package/scripts/mac/vpn/mac-vpn.sh +4 -0
- package/scripts/mcp/aws-mcp-wrapper.ps1 +97 -0
- package/scripts/mcp/aws-mcp-wrapper.sh +53 -0
- package/scripts/mcp/duplo-mcp-wrapper.sh +31 -0
- package/scripts/mcp/filesystem-mcp-wrapper.ps1 +43 -0
- package/scripts/mcp/filesystem-mcp-wrapper.sh +34 -0
- package/scripts/mcp/git-mcp-wrapper.ps1 +42 -0
- package/scripts/mcp/git-mcp-wrapper.sh +33 -0
- package/scripts/mcp/github-mcp-wrapper.ps1 +43 -0
- package/scripts/mcp/github-mcp-wrapper.sh +19 -0
- package/scripts/mcp/kubernetes-mcp-wrapper.ps1 +22 -0
- package/scripts/mcp/kubernetes-mcp-wrapper.sh +16 -0
- package/scripts/mcp/mcp-launcher.ps1 +56 -0
- package/scripts/mcp/mcp-launcher.sh +71 -0
- package/scripts/mcp/mongodb-mcp-wrapper.ps1 +26 -0
- package/scripts/mcp/mongodb-mcp-wrapper.sh +17 -0
- package/scripts/mcp/notion-mcp-wrapper.ps1 +23 -0
- package/scripts/mcp/notion-mcp-wrapper.sh +14 -0
- package/scripts/mcp/postgres-mcp-wrapper.ps1 +23 -0
- package/scripts/mcp/postgres-mcp-wrapper.sh +16 -0
- package/scripts/npm/ncu/npm-ncu.sh +24 -0
- package/scripts/npm/upgrade/npm-upgrade.sh +51 -0
- package/scripts/qmk/build_reviung41.sh +28 -0
- package/scripts/qmk/sync_unicorne.sh +44 -0
- package/scripts/sync/README.md +64 -0
- package/scripts/sync/config-common.zsh +882 -0
- package/scripts/sync/pull-configs.ps1 +33 -0
- package/scripts/sync/pull-configs.zsh +278 -0
- package/scripts/sync/push-configs.ps1 +91 -0
- package/scripts/sync/push-configs.zsh +384 -0
- package/shell/alias/alias-d.zsh +333 -0
- package/shell/alias/alias.zsh +36 -0
- package/shell/alias/categories/development.zsh +157 -0
- package/shell/alias/categories/environment.zsh +13 -0
- package/shell/alias/categories/git.zsh +40 -0
- package/shell/alias/categories/github-functions.zsh +459 -0
- package/shell/alias/categories/network.zsh +46 -0
- package/shell/alias/categories/path.zsh +46 -0
- package/shell/alias/categories/system.zsh +78 -0
- package/shell/alias/categories/wolfe-server.zsh +11 -0
- package/shell/powershell/Microsoft.PowerShell_profile.ps1 +208 -0
- package/shell/zsh/.p10k.zsh +1832 -0
- package/shell/zsh/.zshrc +87 -0
- package/shell/zsh/config/completion.zsh +31 -0
- package/shell/zsh/config/functions.zsh +31 -0
- package/shell/zsh/config/keybindings.zsh +13 -0
- package/shell/zsh/config/options.zsh +56 -0
- package/shell/zsh/config/plugins.zsh +83 -0
- package/shell/zsh/config/variables.zsh +191 -0
- package/shell/zsh/powerlevel10k.zsh-theme +83 -0
- package/shell/zsh/zsh-autosuggestions.zsh +871 -0
- package/ssh/config +46 -0
- package/ssh/config.duplo +21 -0
- package/ssh/config.mikpc +35 -0
- package/ssh/personal_signing.pub +1 -0
- package/templates/.envrc.example +34 -0
- package/templates/.envrc.quickstart +17 -0
- package/wezterm/wezterm.lua +249 -0
- package/wsl/.wslconfig +3 -0
- 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
|