Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
Capture local agent traces and inspect failures, approvals, and run comparisons.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"spanhound": {
"command": "uvx",
"args": [
"spanhound"
]
}
}
}在终端中运行这条命令
claude mcp add spanhound -- uvx spanhound粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"spanhound": {
"command": "uvx",
"args": [
"spanhound"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"spanhound": {
"type": "stdio",
"command": "uvx",
"args": [
"spanhound"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过 GitHub 账户 abhishekash 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.6.1)于23天前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Python (uv)。
同一分类中有:Spec Driven Development, Remote Desktop Commander, Starreel
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Turn a script into a finished, downloadable short-drama episode — via MCP or REST.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
Capture local agent traces. Ask your MCP client what happened. SpanHound (formerly mcp-trace-inspector) captures supported Python agent calls, receives OpenTelemetry over local OTLP/HTTP, and exposes read-only MCP tools for failures, approval decisions, token usage, and run comparisons. It reads JSONL spans and OTLP JSON exports as described in the user guide, including traces from agent-harness.
Demo: Watch the full 48-second video · Read the reproducible story. This is a scripted regression trace, not a live-model benchmark.
The project's concrete origin was a shell-boundary regression: the harness blocked cat ../outside.txt, but the old trace recorded only that run_shell was called, not the returned diagnostic. SpanHound and the harness now preserve and query that bounded error.
uvx spanhound demo
SpanHound demo — recorded agent failure
Tool: run_shell Failure: error: shell path escapes workspace root: '../outside.txt' Approval: approve (auto) Trace: 563e779ee8fa2d7069fc63ed2cf9c8ec (6 spans)
The demo shows a recorded run_shell failure and its approval evidence from a bundled scripted regression trace. It needs no clone, account, trace backend, or MCP client. To inspect your own traces, point SpanHound at a directory of JSONL spans or saved OTLP JSON exports:
uvx spanhound --trace-dir /path/to/traces --check
--check prints the runs it found and exits. Connect an MCP client with the configuration below to ask questions about those runs.
git clone https://github.com/abhishekash/spanhound.git
cd spanhound uvx --from . spanhound --trace-dir examples --check
--check also reports a missing directory or malformed complete JSONL or OTLP JSON record.
To try an OTLP JSON export, run the same command with --trace-dir tests/fixtures. The sample export includes a model call, token usage, a tool call, and an exception.
For a Python agent, install SpanHound's optional auto instrumentation in the same environment as the agent, then run it through SpanHound:
python -m pip install 'spanhound[auto]'
spanhound run --trace-dir ./traces -- python agent.py
The command starts and stops a local receiver, configures OTLP export, and captures supported library calls without changes to agent.py. The optional package includes instrumentation for OpenAI, Anthropic, OpenAI Agents, HTTPX, and Requests. It reports when no spans were produced. Your Python agent and SpanHound must share one environment; for a uv project, use uv add 'spanhound[auto]' and uv run spanhound run -- python agent.py. See the Python capture guide.
For other runtimes, or agents that already export OpenTelemetry traces, start the receiver in one terminal:
uvx spanhound collect --trace-dir ./traces
Point an agent that already uses an OpenTelemetry trace exporter at the receiver, then run the agent:
export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://127.0.0.1:4318/v1/traces
export OTEL_EXPORTER_OTLP_TRACES_PROTOCOL=http/protobuf
SpanHound stores each accepted OTLP/HTTP trace request as a local JSON file. Run uvx spanhound --trace-dir ./traces --check to see the captured runs, then connect your MCP client to that folder. The receiver accepts OTLP/HTTP JSON or protobuf on loopback; it does not add instrumentation to an agent. See the capture guide for limits and privacy.
For a live terminal and browser view of local Codex/Claude Code sessions and received OTLP telemetry, try Agent Observatory. SpanHound provides trace investigation through MCP using JSONL and OTLP JSON files.
Use this when you want a local trace view through MCP without setting up a trace backend. Capture supported Python library calls in one command, receive OTLP/HTTP from another runtime, or read the supported JSONL or OTLP JSON formats. Focused queries include recorded approval decisions, bounded failure diagnostics, and run comparisons.
MCP Agent Trace Inspector records steps into a local SQLite database and provides a dashboard and exports. SpanHound auto-instruments supported Python libraries or receives OTLP/HTTP traces, then queries the captured files through MCP. It does not automatically trace arbitrary agent functions or approvals.
For traces stored in Jaeger, Tempo, or Traceloop, use a backend-connected tool such as OpenTelemetry MCP Server. For a trace UI, instrumentation, and evaluations, see Phoenix. SpanHound does not read backend-specific JSON exports.
| Question during an agent run | MCP tool | Evidence returned |
|---|---|---|
| "Why did yesterday's run stall?" | list_runs → slowest_spans | Run IDs and the longest model or tool spans. |
| "Did the agent act after I denied the write?" | approval_log → span_tree | The recorded decision and subsequent execution path. |
| "How many model tokens did this run use?" | token_usage → span_tree | Run-level usage totals and the span tree for context. |
| "Which tool is failing or timing out?" | failure_report / tool_stats | Redacted diagnostics, error rates, denials, and p95 latency. |
| "Who/what was allowed to act?" | security_audit | Caller, tenant, server provenance, risk, and missing-evidence findings. |
| "What is happening in the run right now?" | recent_activity | Cursor-based polling of newly written spans. |
| "Did this model/version regress?" | compare_runs | Cost, latency, tokens, tool calls, and failure deltas. |
The tools read stored traces and can poll files being written, but they do not push events or infer intent from the final answer. Start with the installation and user guide, then see the real trace fixture and the tool descriptions for the query contract.
uvx spanhound --trace-dir ./traces
git clone https://github.com/abhishekash/spanhound cd spanhound uvx --from . spanhound --trace-dir ./traces
For a desktop client that accepts MCP Bundles, download the .mcpb asset from the latest release and install the downloaded file in the client; the download link does not open a web page. In Claude Desktop, use Settings → Extensions → Advanced settings → Install Extension… and select the .mcpb file. The bundle asks you to choose a local trace folder. It uses UV to install its Python dependencies on first run. SpanHound reads the folder locally; the connected client receives the evidence returned by its MCP tools.
If you previously ran uvx mcp-trace-inspector, change that command to uvx spanhound to receive this release. The old PyPI distribution stays at 0.3.1; the new package retains its Python import paths and command aliases for clients that install spanhound explicitly.
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": { "agent-traces": { "command": "uvx", "args": ["spanhound", "--trace-dir", "/path/to/traces"] } } }
pi (~/.pi/agent/settings.json):
{
"mcpServers": { "agent-traces": { "command": "uvx", "args": ["spanhound", "--trace-dir", "/path/to/traces"] } } }
agent-harness (mounted as gated tools):
harness run "Why was my last run slow?" --mcp "uvx spanhound --trace-dir ./traces"
| Tool | Use it when |
|---|---|
list_runs | Starting out — recent runs with task, model, duration, cost, decision counts |
run_summary | One run at a glance (accepts trace-id prefix) |
span_tree | "What did the agent actually do?" — nested shape of the run |
slowest_spans | "Why was it slow?" — top-k spans by duration |
approval_log | HITL audit — every approve/deny/edit, who decided, and *the rationale* |
token_usage | Cost questions — aggregated across runs or per-run |
search_spans | Find spans by tool name, file path, "denied", … |
failure_report | Find actionable, bounded, redacted errors and failed tool calls. |
tool_stats | Rank tools by volume, error rate, denials, and latency. |
security_audit | Audit caller identity, tenant, server provenance, risk, and approval evidence. |
recent_activity | Poll new spans with a cursor while a run is active. |
compare_runs | Compare selected traces for regressions across models or versions. |
Tool descriptions are written as prompts (when-to-use, not just what-it-does) — descriptions are the interface for agent-called tools.
> list_runs
[{ "trace_id": "f920798dd2558fcb84f9977736432a8b", "task": "Summarize the workspace's notes…", "tool_calls": 4, "human_decisions": 2, "stopped_reason": "completed" }]
approval_log
[{ "tool": "write_file", "decision": "approve", "approver": "auto", … }, { "tool": "run_shell", "decision": "approve", "approver": "auto", … }]
traces/*只显示了开头部分;其余内容请在仓库中阅读