之前 upload_file 把文件写到 DataDir/uploads/<filename>,返回相对路径
uploads/hello.txt。MCP 服务器与 agent 不在同一台机器,agent 无法构造服务
器本地路径,因此 spark_submit 无法定位脚本。
改为由新的 internal/uploads 包 mint 一个 32 字符十六进制 file_id,文件落盘为
DataDir/uploads/<file_id>,元数据写入 <file_id>.meta.json(原始文件名只存在
sidecar 里)。upload_file 返回 {file_id, path, name, size, sha256},其中 path
是绝对路径。spark_submit 的 description 明确要求 LLM 直接把 upload_file 返回
的 path 放进 args,不要自己构造路径。
为什么只在描述里约束而不在代码里拒绝非 mint 的绝对路径:集群本地已有路径
(如 /opt/spark/examples/pi.py)是合法的 spark-submit 参数,代码不能替
LLM 拒绝。
测试锁定:
- internal/uploads: Save 往返、AbsPath/Validate 非法路径、Sweep 过期/未过期/
孤立 sidecar
- internal/mcp/tools: upload_file 新响应字段、spark_submit 透传 mint 路径与
集群本地路径
刻意未做:S3/HDFS 上传、给 spark_submit 新增 file_id 参数、在代码层面拒绝
集群本地绝对路径。
破坏性变更:upload_file 响应从相对 path 改为绝对 path,并新增 file_id/name/
sha256 字段。该工具尚无外部调用者。
Co-Authored-By: Claude <noreply@anthropic.com>
44 lines
1.2 KiB
Bash
44 lines
1.2 KiB
Bash
# spark-mcp-go environment configuration
|
|
# Copy to .env and edit the *REQUIRED* values.
|
|
|
|
# HTTP listen address (default: :8080)
|
|
LISTEN_ADDR=:8080
|
|
|
|
# Root directory for SQLite, uploads, and logs (default: ./data)
|
|
DATA_DIR=./data
|
|
|
|
# *REQUIRED* Comma-separated admin bearer tokens for /admin/* endpoints
|
|
ADMIN_TOKENS=change-me-admin-token-1,change-me-admin-token-2
|
|
|
|
# *REQUIRED* Agent bearer token for /mcp endpoints
|
|
AGENT_TOKEN=change-me-agent-token
|
|
|
|
# Timeout for fetch_url and RM tool HTTP calls (default: 30s)
|
|
HTTP_CLIENT_TIMEOUT=30s
|
|
|
|
# Maximum HTTP response bytes before truncation (default: 1048576)
|
|
MAX_RESPONSE_BYTES=1048576
|
|
|
|
# Timeout for spark-submit process execution (default: 60s)
|
|
SPARK_SUBMIT_TIMEOUT=60s
|
|
|
|
# How long uploaded files are kept. Swept on server startup. Use Go duration syntax (e.g. 24h, 168h, 720h).
|
|
UPLOAD_TTL=168h
|
|
|
|
# Log directory (default: ./data/logs)
|
|
LOG_DIR=./data/logs
|
|
|
|
# Log level: debug, info, warn, error (default: info)
|
|
LOG_LEVEL=info
|
|
|
|
# Log format: text (terminal) or json (log file; default: text)
|
|
LOG_FORMAT=text
|
|
|
|
# Gin mode: debug, release, test (default: release)
|
|
GIN_MODE=release
|
|
|
|
# Analyzer heuristic thresholds (defaults shown)
|
|
ANALYZER_DATA_SKEW_RATIO=3.0
|
|
ANALYZER_GC_PRESSURE_RATIO=0.1
|
|
ANALYZER_BOTTLENECK_SHUFFLE_GB=50
|