fix(mcp) : return CallToolResult to prevent structuredContent serialization issue
Tools now return CallToolResult directly instead of Content arrays, preventing the MCP SDK from auto-generating structuredContent as a JSON array (which Claude Code rejects — expects a JSON object/record). Also adds Accept header to test helpers and SSE response parsing. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -12,6 +12,7 @@ use App\Repository\SiteRepository;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Mcp\Capability\Attribute\McpTool;
|
||||
use Mcp\Schema\Content\TextContent;
|
||||
use Mcp\Schema\Result\CallToolResult;
|
||||
|
||||
#[McpTool(
|
||||
name: 'get_dashboard_stats',
|
||||
@@ -28,14 +29,14 @@ class DashboardStatsTool
|
||||
private readonly EntityManagerInterface $em,
|
||||
) {}
|
||||
|
||||
public function __invoke(): array
|
||||
public function __invoke(): CallToolResult
|
||||
{
|
||||
$unresolvedComments = (int) $this->em->createQuery(
|
||||
"SELECT COUNT(c.id) FROM App\\Entity\\Comment c WHERE c.status = 'open'"
|
||||
)->getSingleScalarResult();
|
||||
|
||||
return [
|
||||
new TextContent(
|
||||
return new CallToolResult(
|
||||
content: [new TextContent(
|
||||
text: json_encode([
|
||||
'machines' => $this->machines->count([]),
|
||||
'pieces' => $this->pieces->count([]),
|
||||
@@ -44,7 +45,7 @@ class DashboardStatsTool
|
||||
'sites' => $this->sites->count([]),
|
||||
'unresolvedComments' => $unresolvedComments,
|
||||
], JSON_THROW_ON_ERROR)
|
||||
),
|
||||
];
|
||||
)],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user