Skip to content

fixed bug with body param parsing #95

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions examples/01_basic_usage_example.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from examples.shared.apps.items import app # The FastAPI app
from examples.shared.apps.items import app # The FastAPI app
from examples.shared.setup import setup_logging

from fastapi_mcp import FastApiMCP
Expand All @@ -15,4 +15,4 @@
if __name__ == "__main__":
import uvicorn

uvicorn.run(app, host="0.0.0.0", port=8000)
uvicorn.run(app, host="0.0.0.0", port=8000)
6 changes: 3 additions & 3 deletions examples/02_full_schema_description_example.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@

"""
This example shows how to describe the full response schema instead of just a response example.
"""
from examples.shared.apps.items import app # The FastAPI app

from examples.shared.apps.items import app # The FastAPI app
from examples.shared.setup import setup_logging

from fastapi_mcp import FastApiMCP
Expand All @@ -22,5 +22,5 @@

if __name__ == "__main__":
import uvicorn

uvicorn.run(app, host="0.0.0.0", port=8000)
5 changes: 3 additions & 2 deletions examples/03_custom_exposed_endpoints_example.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
- You can combine operation filtering with tag filtering (e.g., use `include_operations` with `include_tags`)
- When combining filters, a greedy approach will be taken. Endpoints matching either criteria will be included
"""
from examples.shared.apps.items import app # The FastAPI app

from examples.shared.apps.items import app # The FastAPI app
from examples.shared.setup import setup_logging

from fastapi_mcp import FastApiMCP
Expand All @@ -24,7 +25,7 @@

# Filter by excluding specific operation IDs
exclude_operations_mcp = FastApiMCP(
app,
app,
name="Item API MCP - Excluded Operations",
exclude_operations=["create_item", "update_item", "delete_item"],
)
Expand Down
3 changes: 2 additions & 1 deletion examples/04_separate_server_example.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
This example shows how to run the MCP server and the FastAPI app separately.
You can create an MCP server from one FastAPI app, and mount it to a different app.
"""

from fastapi import FastAPI

from examples.shared.apps.items import app
Expand Down Expand Up @@ -30,4 +31,4 @@
if __name__ == "__main__":
import uvicorn

uvicorn.run(mcp_app, host="0.0.0.0", port=8000)
uvicorn.run(mcp_app, host="0.0.0.0", port=8000)
9 changes: 5 additions & 4 deletions examples/05_reregister_tools_example.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
"""
This example shows how to re-register tools if you add endpoints after the MCP server was created.
"""
from examples.shared.apps.items import app # The FastAPI app

from examples.shared.apps.items import app # The FastAPI app
from examples.shared.setup import setup_logging

from fastapi_mcp import FastApiMCP

setup_logging()

mcp = FastApiMCP(app) # Add MCP server to the FastAPI app
mcp.mount() # MCP server
mcp = FastApiMCP(app) # Add MCP server to the FastAPI app
mcp.mount() # MCP server


# This endpoint will not be registered as a tool, since it was added after the MCP instance was created
Expand All @@ -24,5 +25,5 @@ async def new_endpoint():

if __name__ == "__main__":
import uvicorn

uvicorn.run(app, host="0.0.0.0", port=8000)
7 changes: 4 additions & 3 deletions examples/06_custom_mcp_router_example.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
"""
This example shows how to mount the MCP server to a specific APIRouter, giving a custom mount path.
"""
from examples.shared.apps.items import app # The FastAPI app

from examples.shared.apps.items import app # The FastAPI app
from examples.shared.setup import setup_logging

from fastapi import APIRouter
from fastapi_mcp import FastApiMCP

setup_logging()

other_router = APIRouter(prefix="/other/route")
other_router = APIRouter(prefix="/other/route")
app.include_router(other_router)

mcp = FastApiMCP(app)
Expand All @@ -21,5 +22,5 @@

if __name__ == "__main__":
import uvicorn

uvicorn.run(app, host="0.0.0.0", port=8000)
10 changes: 4 additions & 6 deletions examples/07_configure_http_timeout_example.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
This example shows how to configure the HTTP client timeout for the MCP server.
In case you have API endpoints that take longer than 5 seconds to respond, you can increase the timeout.
"""
from examples.shared.apps.items import app # The FastAPI app

from examples.shared.apps.items import app # The FastAPI app
from examples.shared.setup import setup_logging

import httpx
Expand All @@ -12,14 +13,11 @@
setup_logging()


mcp = FastApiMCP(
app,
http_client=httpx.AsyncClient(timeout=20)
)
mcp = FastApiMCP(app, http_client=httpx.AsyncClient(timeout=20))
mcp.mount()


if __name__ == "__main__":
import uvicorn

uvicorn.run(app, host="0.0.0.0", port=8000)
4 changes: 3 additions & 1 deletion fastapi_mcp/openapi/convert.py
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,8 @@ def convert_openapi_to_mcp_tools(
for param_name, param in path_params:
param_schema = param.get("schema", {})
param_desc = param.get("description", "")
param_required = param.get("required", True) # Path params are usually required
# Path params are usually required
param_required = param.get("required", True)

properties[param_name] = param_schema.copy()
properties[param_name]["title"] = param_name
Expand Down Expand Up @@ -236,6 +237,7 @@ def convert_openapi_to_mcp_tools(
# Add body parameters to properties
for param_name, param in body_params:
param_schema = param.get("schema", {})
param_desc = param.get("description", "")
param_required = param.get("required", False)

properties[param_name] = param_schema.copy()
Expand Down