What changed, and where did it start? A read-only MCP server and CLI that ranks changes across metrics, logs and traces and tells causes from echoes.
接入配置
选择客户端,复制配置,再按项目文档补齐环境变量。
claude mcp add spoor --env SPOOR_METRICS_URL='<SPOOR_METRICS_URL>' --env SPOOR_LOGS_URL='<SPOOR_LOGS_URL>' --env SPOOR_TRACES_URL='<SPOOR_TRACES_URL>' --env SPOOR_METRICS_TOKEN='<SPOOR_METRICS_TOKEN>' --env SPOOR_LOGS_TOKEN='<SPOOR_LOGS_TOKEN>' --env SPOOR_TRACES_TOKEN='<SPOOR_TRACES_TOKEN>' -- docker run -i --rm -e SPOOR_METRICS_URL -e SPOOR_LOGS_URL -e SPOOR_TRACES_URL -e SPOOR_METRICS_TOKEN -e SPOOR_LOGS_TOKEN -e SPOOR_TRACES_TOKEN ghcr.io/asinha07/spoor:0.2.1~/.codex/config.toml
[mcp_servers.spoor]
command = "docker"
args = ["run", "-i", "--rm", "-e", "SPOOR_METRICS_URL", "-e", "SPOOR_LOGS_URL", "-e", "SPOOR_TRACES_URL", "-e", "SPOOR_METRICS_TOKEN", "-e", "SPOOR_LOGS_TOKEN", "-e", "SPOOR_TRACES_TOKEN", "ghcr.io/asinha07/spoor:0.2.1"]
env = { SPOOR_METRICS_URL = "<SPOOR_METRICS_URL>", SPOOR_LOGS_URL = "<SPOOR_LOGS_URL>", SPOOR_TRACES_URL = "<SPOOR_TRACES_URL>", SPOOR_METRICS_TOKEN = "<SPOOR_METRICS_TOKEN>", SPOOR_LOGS_TOKEN = "<SPOOR_LOGS_TOKEN>", SPOOR_TRACES_TOKEN = "<SPOOR_TRACES_TOKEN>" }
# codex mcp add spoor --env SPOOR_METRICS_URL='<SPOOR_METRICS_URL>' --env SPOOR_LOGS_URL='<SPOOR_LOGS_URL>' --env SPOOR_TRACES_URL='<SPOOR_TRACES_URL>' --env SPOOR_METRICS_TOKEN='<SPOOR_METRICS_TOKEN>' --env SPOOR_LOGS_TOKEN='<SPOOR_LOGS_TOKEN>' --env SPOOR_TRACES_TOKEN='<SPOOR_TRACES_TOKEN>' -- docker run -i --rm -e SPOOR_METRICS_URL -e SPOOR_LOGS_URL -e SPOOR_TRACES_URL -e SPOOR_METRICS_TOKEN -e SPOOR_LOGS_TOKEN -e SPOOR_TRACES_TOKEN ghcr.io/asinha07/spoor:0.2.1~/.cursor/mcp.json
{
"mcpServers": {
"spoor": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"SPOOR_METRICS_URL",
"-e",
"SPOOR_LOGS_URL",
"-e",
"SPOOR_TRACES_URL",
"-e",
"SPOOR_METRICS_TOKEN",
"-e",
"SPOOR_LOGS_TOKEN",
"-e",
"SPOOR_TRACES_TOKEN",
"ghcr.io/asinha07/spoor:0.2.1"
],
"env": {
"SPOOR_METRICS_URL": "<SPOOR_METRICS_URL>",
"SPOOR_LOGS_URL": "<SPOOR_LOGS_URL>",
"SPOOR_TRACES_URL": "<SPOOR_TRACES_URL>",
"SPOOR_METRICS_TOKEN": "<SPOOR_METRICS_TOKEN>",
"SPOOR_LOGS_TOKEN": "<SPOOR_LOGS_TOKEN>",
"SPOOR_TRACES_TOKEN": "<SPOOR_TRACES_TOKEN>"
}
}
}
}.vscode/mcp.json
{
"servers": {
"spoor": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"SPOOR_METRICS_URL",
"-e",
"SPOOR_LOGS_URL",
"-e",
"SPOOR_TRACES_URL",
"-e",
"SPOOR_METRICS_TOKEN",
"-e",
"SPOOR_LOGS_TOKEN",
"-e",
"SPOOR_TRACES_TOKEN",
"ghcr.io/asinha07/spoor:0.2.1"
],
"env": {
"SPOOR_METRICS_URL": "<SPOOR_METRICS_URL>",
"SPOOR_LOGS_URL": "<SPOOR_LOGS_URL>",
"SPOOR_TRACES_URL": "<SPOOR_TRACES_URL>",
"SPOOR_METRICS_TOKEN": "<SPOOR_METRICS_TOKEN>",
"SPOOR_LOGS_TOKEN": "<SPOOR_LOGS_TOKEN>",
"SPOOR_TRACES_TOKEN": "<SPOOR_TRACES_TOKEN>"
}
}
}
}~/.gemini/settings.json
{
"mcpServers": {
"spoor": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"SPOOR_METRICS_URL",
"-e",
"SPOOR_LOGS_URL",
"-e",
"SPOOR_TRACES_URL",
"-e",
"SPOOR_METRICS_TOKEN",
"-e",
"SPOOR_LOGS_TOKEN",
"-e",
"SPOOR_TRACES_TOKEN",
"ghcr.io/asinha07/spoor:0.2.1"
],
"env": {
"SPOOR_METRICS_URL": "<SPOOR_METRICS_URL>",
"SPOOR_LOGS_URL": "<SPOOR_LOGS_URL>",
"SPOOR_TRACES_URL": "<SPOOR_TRACES_URL>",
"SPOOR_METRICS_TOKEN": "<SPOOR_METRICS_TOKEN>",
"SPOOR_LOGS_TOKEN": "<SPOOR_LOGS_TOKEN>",
"SPOOR_TRACES_TOKEN": "<SPOOR_TRACES_TOKEN>"
}
}
}
}claude_desktop_config.json
{
"mcpServers": {
"spoor": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"SPOOR_METRICS_URL",
"-e",
"SPOOR_LOGS_URL",
"-e",
"SPOOR_TRACES_URL",
"-e",
"SPOOR_METRICS_TOKEN",
"-e",
"SPOOR_LOGS_TOKEN",
"-e",
"SPOOR_TRACES_TOKEN",
"ghcr.io/asinha07/spoor:0.2.1"
],
"env": {
"SPOOR_METRICS_URL": "<SPOOR_METRICS_URL>",
"SPOOR_LOGS_URL": "<SPOOR_LOGS_URL>",
"SPOOR_TRACES_URL": "<SPOOR_TRACES_URL>",
"SPOOR_METRICS_TOKEN": "<SPOOR_METRICS_TOKEN>",
"SPOOR_LOGS_TOKEN": "<SPOOR_LOGS_TOKEN>",
"SPOOR_TRACES_TOKEN": "<SPOOR_TRACES_TOKEN>"
}
}
}
}.trae/mcp.json
{
"mcpServers": {
"spoor": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"SPOOR_METRICS_URL",
"-e",
"SPOOR_LOGS_URL",
"-e",
"SPOOR_TRACES_URL",
"-e",
"SPOOR_METRICS_TOKEN",
"-e",
"SPOOR_LOGS_TOKEN",
"-e",
"SPOOR_TRACES_TOKEN",
"ghcr.io/asinha07/spoor:0.2.1"
],
"env": {
"SPOOR_METRICS_URL": "<SPOOR_METRICS_URL>",
"SPOOR_LOGS_URL": "<SPOOR_LOGS_URL>",
"SPOOR_TRACES_URL": "<SPOOR_TRACES_URL>",
"SPOOR_METRICS_TOKEN": "<SPOOR_METRICS_TOKEN>",
"SPOOR_LOGS_TOKEN": "<SPOOR_LOGS_TOKEN>",
"SPOOR_TRACES_TOKEN": "<SPOOR_TRACES_TOKEN>"
}
}
}
}需要的环境变量
SPOOR_METRICS_URLSPOOR_LOGS_URLSPOOR_TRACES_URLSPOOR_METRICS_TOKENSPOOR_LOGS_TOKENSPOOR_TRACES_TOKEN
把占位值换成你自己的密钥;不要把密钥提交到代码仓库。