# Reported issues for parkour-mcp

Pod holds 6 of 6 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.

Back to [parkour-mcp](/mcp/parkour-mcp).

## Most discussed

### perf: MarkdownSplitter has no wall-clock deadline; pathological input hangs web_fetch_sections post-size-cap relaxation

## Summary

`guarded_fetch` wraps only the HTTP portion of a fetch in
`asyncio.timeout(60s)`.  Everything after it — HTML→markdown
conversion, `MarkdownSplitter.chunk_indices`, tantivy index build —
runs synchronously with no deadline.  For realistic documents this is
fine (WHATWG HTML-LS: ~4.6s pipeline per the captured `pathological`
baseline), but degenerate input can push the splitter into character-
level fallback with pathologically slow runtime.

A 6 MiB HTML body consisting of a single `

[Read the thread](https://github.com/blightbow/parkour-mcp/issues/6) · 2026-04-16 · closed · 1 comment

### perf: consume structured metadata in html_to_markdown() once upstream visitor+metadata bug resolves

## Status update (2026-04-10): holding pattern pending upstream response

After landing the initial port on branch `perf/html-to-markdown-rust` and running the regression benchmark suite, we discovered additional defects in html-to-markdown 3.1.0 beyond the single visitor+metadata bug the original port was working around. Upstream filings now cover four separate issues:

- **kreuzberg-dev/html-to-markdown#275** — Python visitor + metadata returns empty. The original bug the port was working arou

[Read the thread](https://github.com/blightbow/parkour-mcp/issues/4) · 2026-04-11 · closed · 1 comment

### Tool responses doubled on the wire: SDK auto-wraps str returns into structuredContent

## Summary

Every parkour tool response is transmitted twice in each `CallToolResult`. Tools are annotated `-> str`, but the MCP SDK (`mcp` 1.23.3) auto-wraps primitive return types into a structured-output model, so the full payload ships in both `content` (a `TextContent` block) and `structuredContent` (`{"result": "<same markdown>"}`).

## Mechanism

`__init__.py#main` calls `mcp.add_tool(func, ...)` without `structured_output=`, so it defaults to `None`. The SDK treats `None` as "generate st

[Read the thread](https://github.com/blightbow/parkour-mcp/issues/9) · 2026-05-16 · closed · 0 comments

### fix(markdown): max_sections=100 hides relevant sections in long-document TOC dump

## Summary

UAT against Claude Desktop on RFC 9110 looked up \`section=\"15. Security Considerations\"\`.  The number was wrong — Security Considerations is §17 in RFC 9110.  But the agent had no good way to discover that, because both the failed-section TOC fallback and \`web_fetch_sections\` itself cap their output at \`max_sections=100\` (\`parkour_mcp/markdown.py:584\`).  RFC 9110 has ~311 sections, so the §15-17 range that the agent needed to disambiguate is below the cutoff and never visib

[Read the thread](https://github.com/blightbow/parkour-mcp/issues/8) · 2026-04-16 · closed · 0 comments

### fix(ietf): rfc-editor.org URLs trap callers in metadata-only fast path; "use .html URL" hint loops back to interceptor

## Summary

UAT against Claude Desktop on RFC 9110 (HTTP Semantics) found that the IETF fast path on `www.rfc-editor.org/rfc/rfc{N}*` URLs is a one-way trap: every suffix (`.html`, `.txt`, `.xml`, bare) resolves to the same RFC Editor metadata response, the metadata's own `full_text` hint points the caller back into the interceptor, and there is no in-band path to the document body or a section TOC. The Datatracker mirror under `/doc/html/rfc{N}` is the only practical escape hatch and is not adv

[Read the thread](https://github.com/blightbow/parkour-mcp/issues/7) · 2026-04-16 · closed · 0 comments

### fix: section= returns header-only output on long Wikipedia list pages

## Summary

`_apply_semantic_truncation` in `parkour_mcp/markdown.py:274` returns
`chunks[0]` from `MarkdownSplitter.chunks()` and discards the rest.
Whenever the content starts with a heading and the body would overflow
the chunk budget, `MarkdownSplitter` cleaves the heading into its own
chunk (chunk 0 = `"## Film"`, ~7 chars) and puts the body in
subsequent chunks.  The current code keeps only the heading.

User-visible symptom: passing `section="Film"` to any fast path on a
long Wikipedia li

[Read the thread](https://github.com/blightbow/parkour-mcp/issues/5) · 2026-04-13 · closed · 0 comments

## Most recent

The remaining reports are on [the project's issue tracker](https://github.com/blightbow/parkour-mcp/issues).
