unclecode / unclecode/crawl4ai

[Bug]: MCP "ask" tool exposes an empty parameters schema ({"type":"object"} with no "properties"), rejected by strict tool-calling clients

Open
#2,207 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

🐞 Bug 🩺 Needs Triage
Dominant language
Python
Stars
83.9k
Forks
8.7k
Avg merge
3d 7h
Merged PRs (30d)
11

Description

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:

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
Not applicable
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

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at the @app.get("/ask") endpoint and the attach_mcp registration path, then inspect the /mcp/schema output for the ask tool. Ensure its object parameters schema includes a properties key while preserving context_type, query, score_ratio, and max_results, and verify that strict MCP clients accept the generated schema.

Written by the indexing model from the issue text.

Assessment

Tech stack
fastapi, python
Domain
api
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
72/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.