Uh oh!
There was an error while loading. Please reload this page.
fix: plan_file_info returns empty for report artifact on HTTP server - #166
Merged
Conversation
neoneyeforce-pushed
the
mcp-file-info-report-empty
branch
2 times, most recently
from
March 7, 2026 13:48
110e188 to
69e58d7CompareRoot cause: FastMCP derives outputSchema from Annotated[CallToolResult, OutputModel] return type annotations, producing a schema that only covers the success shape. Tools with multiple response shapes (oneOf: success, not-ready, error) had non-conforming responses seen as empty by MCP clients. Fix: Remove output model annotations from all 8 tool functions. Inject canonical schemas from TOOL_DEFINITIONS as instance attributes on FastMCP Tool objects (shadowing the cached_property) so list_tools() advertises the correct schema while convert_result() skips validation. oneOf schemas (plan_status, plan_file_info) are not advertised because MCP clients require outputSchema to have "type": "object" at top level. Also: add JSON-RPC guard in strip_redundant_content, rename legacy "task-id" to "plan-id" in test fixtures, document the injection pattern and constraints in AGENTS.md. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
neoneyeforce-pushed
the
mcp-file-info-report-empty
branch
from
March 7, 2026 13:57
69e58d7 to
d5423f8CompareUh oh!
There was an error while loading. Please reload this page.
4 tasks
huangyingting pushed a commit
to repomesh/PlanExe
that referenced
this pull request
Jun 26, 2026
Resolves Dependabot security alerts in worker_plan/pyproject.toml by bumping to the first stable patched release of each package: - aiohttp 3.13.5 -> 3.14.1 (alerts PlanExeOrg#152,PlanExeOrg#153,PlanExeOrg#156-PlanExeOrg#164) - tornado 6.5.4 -> 6.5.7 (alerts PlanExeOrg#113,PlanExeOrg#114,PlanExeOrg#136,PlanExeOrg#155,PlanExeOrg#165,PlanExeOrg#166,PlanExeOrg#171) - python-multipart 0.0.22 -> 0.0.32 (alerts PlanExeOrg#142,PlanExeOrg#149,PlanExeOrg#167-PlanExeOrg#170) - urllib3 2.6.3 -> 2.7.0 (alerts PlanExeOrg#150,PlanExeOrg#151) - marshmallow 3.24.2 -> 3.26.2 (alert PlanExeOrg#81), staying on 3.x to avoid the breaking 4.x major transformers alert PlanExeOrg#137 is excluded: its only fix is the 5.x major line and the vulnerable Trainer class is never imported by PlanExe (handled separately). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
outputSchemafromAnnotated[CallToolResult, OutputModel]return type annotations, producing a schema that only covers the success shape. Tools likeplan_file_infoandplan_statushave multiple response shapes (oneOf: success, not-ready, error). The derived schema misses the other shapes, causing MCP clients to see non-conforming responses as empty.oneOfschemas fromTOOL_DEFINITIONSinto FastMCP tools after registration.strip_redundant_contentto prevent accidental stripping of MCP protocol envelopes."task-id"→"plan-id"in test fixtures.Test plan
test_http_utils.py— 10 tests: JSON-RPC guard (error, notification, content-only), non-JSON-RPC stripping, value preservationtest_plan_file_info_tool.py— 15 tests: every response shape (pending, processing, completed, failed, not-found) for both report and zip, structuredContent presence, content/structuredContent consistencytest_tool_surface_consistency.py— 45 tests: FastMCP schema matches TOOL_DEFINITIONS, oneOf variant counts, no Annotated return types, schema not derived from flat Pydantic model🤖 Generated with Claude Code