From 2a7a4b7d63496ee9cf4b830e66757c09420685a2 Mon Sep 17 00:00:00 2001 From: Kaiohz Date: Wed, 20 May 2026 13:11:32 +0200 Subject: [PATCH] fix: simplify MCP tool response to reduce grammar size for Bedrock - Replace BricksDocumentInfo (16 fields) with DocumentSummary (5 fields) in list_bricks_documents - Bedrock returns 400 'compiled grammar is too large' when tool schemas are too complex - Only expose what the LLM needs: id, file_name, mime_type, size, status --- src/application/api/mcp_bricks_tools.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/application/api/mcp_bricks_tools.py b/src/application/api/mcp_bricks_tools.py index 34adf6e..a5d8803 100644 --- a/src/application/api/mcp_bricks_tools.py +++ b/src/application/api/mcp_bricks_tools.py @@ -2,6 +2,7 @@ from fastmcp import FastMCP from fastmcp.exceptions import ToolError +from pydantic import BaseModel, Field from application.responses.file_response import FileContentResponse from dependencies import ( @@ -15,8 +16,16 @@ mcp_bricks = FastMCP("RAGAnythingBricks") +class DocumentSummary(BaseModel): + id: str = Field(description="Document ID — pass this to read_bricks_document") + file_name: str = Field(description="Nom du fichier") + mime_type: str = Field(default="", description="Type MIME du fichier") + size: int = Field(default=0, description="Taille en octets") + status: str = Field(default="", description="Statut du document") + + @mcp_bricks.tool() -async def list_bricks_documents(project_unique_id: str) -> list: +async def list_bricks_documents(project_unique_id: str) -> list[DocumentSummary]: """Liste les documents d'un projet Bricks. Args: @@ -27,12 +36,22 @@ async def list_bricks_documents(project_unique_id: str) -> list: """ use_case = get_list_bricks_documents_use_case() try: - return await use_case.execute(project_id=project_unique_id) + documents = await use_case.execute(project_id=project_unique_id) except Exception: logger.exception( "Failed to list bricks documents for project %s", project_unique_id ) raise ToolError("Failed to list bricks documents") from None + return [ + DocumentSummary( + id=doc.id, + file_name=doc.file_name, + mime_type=doc.mime_type, + size=doc.size, + status=doc.status, + ) + for doc in documents + ] @mcp_bricks.tool() @@ -100,4 +119,4 @@ async def publish_section_version( logger.exception( "Failed to publish section version for project %s", project_unique_id ) - raise ToolError("Failed to publish section version") from None + raise ToolError("Failed to publish section version") from None \ No newline at end of file