242bb15641
Expose the existing stdio server to a dedicated Buzz agent without granting mutation tools or leaking unrelated runtime credentials. Document the verified Hermes and Buzz client paths. Co-authored-by: fredamn76 <fredrik.fallman@gmail.com> Signed-off-by: fredamn76 <fredrik.fallman@gmail.com>
80 lines
2.6 KiB
Bash
Executable File
80 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Buzz's managed-agent harness accepts one MCP executable per agent. Keep the
|
|
# Mealie credential out of the agent definition by loading only the three
|
|
# variables this server understands from the existing Hermes dotenv file.
|
|
mealie_env_file="${MEALIE_ENV_FILE:-${HOME}/.hermes/.env}"
|
|
mealie_repo_dir="${MEALIE_MCP_REPO_DIR:-/home/fredrik/.buzz/REPOS/mealie-mcp}"
|
|
mealie_uv_bin="${MEALIE_UV_BIN:-/home/fredrik/.local/bin/uv}"
|
|
|
|
mealie_token="${MEALIE_API_TOKEN:-}"
|
|
mealie_base_url="${MEALIE_BASE_URL:-}"
|
|
mealie_user_agent="${MEALIE_USER_AGENT:-}"
|
|
|
|
clean_dotenv_value() {
|
|
local value="$1"
|
|
local first
|
|
local last
|
|
|
|
value="${value%$'\r'}"
|
|
if (( ${#value} >= 2 )); then
|
|
first="${value:0:1}"
|
|
last="${value: -1}"
|
|
if [[ "$first" == "$last" && ( "$first" == "'" || "$first" == '"' ) ]]; then
|
|
value="${value:1:${#value}-2}"
|
|
fi
|
|
fi
|
|
REPLY="$value"
|
|
}
|
|
|
|
if [[ -r "$mealie_env_file" ]]; then
|
|
while IFS= read -r line || [[ -n "$line" ]]; do
|
|
case "$line" in
|
|
MEALIE_API_TOKEN=*)
|
|
if [[ -z "$mealie_token" ]]; then
|
|
clean_dotenv_value "${line#*=}"
|
|
mealie_token="$REPLY"
|
|
fi
|
|
;;
|
|
MEALIE_BASE_URL=*)
|
|
if [[ -z "$mealie_base_url" ]]; then
|
|
clean_dotenv_value "${line#*=}"
|
|
mealie_base_url="$REPLY"
|
|
fi
|
|
;;
|
|
MEALIE_USER_AGENT=*)
|
|
if [[ -z "$mealie_user_agent" ]]; then
|
|
clean_dotenv_value "${line#*=}"
|
|
mealie_user_agent="$REPLY"
|
|
fi
|
|
;;
|
|
esac
|
|
done < "$mealie_env_file"
|
|
fi
|
|
|
|
if [[ -z "$mealie_token" ]]; then
|
|
printf 'MEALIE_API_TOKEN is not set and was not found in %s\n' "$mealie_env_file" >&2
|
|
exit 1
|
|
fi
|
|
|
|
mealie_base_url="${mealie_base_url:-https://recept.famfallman.com}"
|
|
mealie_user_agent="${mealie_user_agent:-Mealie-MCP/0.1}"
|
|
|
|
# Do not forward the rest of the Desktop/Hermes environment to the MCP
|
|
# subprocess. In particular, unrelated provider and platform tokens must not
|
|
# become visible to this server. Export after sanitizing so the token is never
|
|
# passed as a command-line argument to an intermediate `env` process.
|
|
while IFS= read -r variable_name; do
|
|
case "$variable_name" in
|
|
HOME | PATH | LANG) ;;
|
|
*) unset "$variable_name" ;;
|
|
esac
|
|
done < <(compgen -e)
|
|
|
|
export MEALIE_API_TOKEN="$mealie_token"
|
|
export MEALIE_BASE_URL="$mealie_base_url"
|
|
export MEALIE_USER_AGENT="$mealie_user_agent"
|
|
|
|
exec "$mealie_uv_bin" --directory "$mealie_repo_dir" run mealie-mcp-read-only
|