crawl4ai version
0.9.2
Expected Behavior
Every MCP tool exposed by the mcp server should publish a valid JSON-Schema for its parameters. For an object-type schema that means including a properties key (even if empty). Strict OpenAI-compatible tool-calling clients require parameters.properties to be present, otherwise the fail to load.
Current Behavior
The ask MCP tool publishes a parameters schema of exactly:
with no properties key. Strict validators reject it. LM Studio or LibreChat, for example, returns a 400 before the request even runs:
400 [{"code":"invalid_type","expected":"object","received":"undefined",
"path":[<n>,"function","parameters","properties"],"message":"Required"}]
Every other MCP tool (md, html, screenshot, pdf, crawl) works, because they are POST endpoints backed by a Pydantic body model and therefore get a fully-populated properties schema. ask is the only tool defined as @app.get("/ask") using FastAPI Query(...) params (context_type, query, score_ratio, max_results). The MCP bridge appears to derive the input schema from the Pydantic request body only, so a query-parameter endpoint yields an empty object schema. Net effect: the ask tool is unusable with any MCP client that strictly validates tool schemas, and there is no config/env flag to disable just that tool (attach_mcp registers all @mcp_tool endpoints unconditionally).
Is this reproducible?
Yes
Inputs Causing the Bug
- Any OpenAI-compatible MCP client that validates tool JSON-Schemas (e.g. LM Studio)
- Tool: ask (function name "ask_mcp_crawl4ai" in clients)
- Server: official Crawl4AI Docker deployment, MCP over /mcp/sse (or HTTP)
Steps to Reproduce
1. Run the Crawl4AI Docker server (0.9.2) with the MCP endpoint enabled.
2. GET /mcp/schema and inspect the "ask" tool — its parameters are {"type":"object"} with no "properties".
3. Connect a strict OpenAI-compatible client (LM Studio, Librechat) to the MCP endpoint, enabling the crawl4ai tools.
4. Send any chat completion that includes the tool list.
5. Observe a 400: parameters.properties "Required" for the ask tool; the request never runs.
Code snippets
OS
Linux (official Crawl4AI Docker image)
Python version
unclecode/crawl4ai:0.9.2 image (Python 3.x)
Browser
N/A
Browser version
N/A
Error logs & Screenshots (if applicable)
No response
crawl4ai version
0.9.2
Expected Behavior
Every MCP tool exposed by the mcp server should publish a valid JSON-Schema for its parameters. For an object-type schema that means including a properties key (even if empty). Strict OpenAI-compatible tool-calling clients require parameters.properties to be present, otherwise the fail to load.
Current Behavior
The ask MCP tool publishes a parameters schema of exactly:
{ "type": "object" }with no properties key. Strict validators reject it. LM Studio or LibreChat, for example, returns a 400 before the request even runs:
Every other MCP tool (md, html, screenshot, pdf, crawl) works, because they are POST endpoints backed by a Pydantic body model and therefore get a fully-populated properties schema. ask is the only tool defined as @app.get("/ask") using FastAPI Query(...) params (context_type, query, score_ratio, max_results). The MCP bridge appears to derive the input schema from the Pydantic request body only, so a query-parameter endpoint yields an empty object schema. Net effect: the ask tool is unusable with any MCP client that strictly validates tool schemas, and there is no config/env flag to disable just that tool (attach_mcp registers all @mcp_tool endpoints unconditionally).
Is this reproducible?
Yes
Inputs Causing the Bug
Steps to Reproduce
Code snippets
OS
Linux (official Crawl4AI Docker image)
Python version
unclecode/crawl4ai:0.9.2 image (Python 3.x)
Browser
N/A
Browser version
N/A
Error logs & Screenshots (if applicable)
No response