Files
gitea_mcp/gitea-mcp.ps1
T
2026-08-07 22:18:16 +08:00

58 lines
2.2 KiB
PowerShell

$ErrorActionPreference = 'Stop'
$envFile = Join-Path (Split-Path -Parent $PSScriptRoot) 'gitea.env'
if (-not (Test-Path -LiteralPath $envFile -PathType Leaf)) {
throw "Gitea MCP configuration file not found: $envFile"
}
$values = @{}
foreach ($rawLine in Get-Content -LiteralPath $envFile) {
$line = $rawLine.Trim()
if (-not $line -or $line.StartsWith('#')) {
continue
}
$parts = $line -split '=', 2
if ($parts.Count -ne 2) {
throw "Invalid line in $envFile. Use KEY=VALUE format."
}
$values[$parts[0].Trim()] = $parts[1].Trim()
}
foreach ($name in @('GITEA_URL', 'GITEA_TOKEN')) {
if (-not $values.ContainsKey($name) -or [string]::IsNullOrWhiteSpace($values[$name])) {
throw "$name is missing or empty in $envFile"
}
Set-Item -Path "Env:$name" -Value $values[$name]
}
# This self-hosted Gitea instance must not be sent through the system SOCKS proxy.
$noProxyHost = 'ilaer.eicp.net'
$existingNoProxy = @($env:NO_PROXY, $env:no_proxy) |
Where-Object { -not [string]::IsNullOrWhiteSpace($_) } |
Select-Object -First 1
$noProxyEntries = @($existingNoProxy -split ',' | ForEach-Object { $_.Trim() } | Where-Object { $_ })
if ($noProxyEntries -notcontains $noProxyHost) {
$noProxyEntries += $noProxyHost
}
$env:NO_PROXY = $noProxyEntries -join ','
$env:no_proxy = $env:NO_PROXY
# httpx initializes configured SOCKS transports before evaluating NO_PROXY.
# Clear proxy variables only for this MCP child process so it connects directly.
foreach ($proxyVariable in @('ALL_PROXY', 'all_proxy', 'HTTP_PROXY', 'http_proxy', 'HTTPS_PROXY', 'https_proxy')) {
Remove-Item -Path "Env:$proxyVariable" -ErrorAction SilentlyContinue
}
# Run the locally maintained build so custom Wiki tools are not replaced by
# uvx resolving the latest published package on the next process start.
$giteaMcpExecutable = 'D:\chengma\gitea-mcp\.venv\Scripts\gitea-mcp.exe'
if (-not (Test-Path -LiteralPath $giteaMcpExecutable -PathType Leaf)) {
throw "Local Gitea MCP executable not found: $giteaMcpExecutable"
}
# Keep stdout exclusively for MCP JSON-RPC. FastMCP diagnostics are noisy on stderr.
& $giteaMcpExecutable 2>> (Join-Path $PSScriptRoot ("gitea-mcp-$PID.stderr.log"))
exit $LASTEXITCODE