fix(mcp): embed deprecation notice as JSON field instead of separate content item

Claude.ai filters out prepended content items as metadata but must
process top-level JSON fields as response data, making it far more
likely to surface the notice to the user.
This commit is contained in:
jubnl
2026-04-10 02:54:03 +02:00
parent 1187883c6b
commit ce36b550c3
+5 -6
View File
@@ -131,9 +131,9 @@ export function registerTripTools(server: McpServer, userId: number, scopes: str
async ({ include_archived }) => {
const notice = getDeprecationNotice();
const trips = listTrips(userId, include_archived ? null : 0);
const result = ok({ trips });
if (notice) return { content: [{ type: 'text' as const, text: notice }, ...result.content] };
return result;
// Embed notice as a top-level JSON field so Claude processes it as data,
// not as a separate content annotation it can silently ignore.
return ok({ ...(notice ? { _deprecation_notice: notice } : {}), trips });
}
);
@@ -171,7 +171,8 @@ export function registerTripTools(server: McpServer, userId: number, scopes: str
messageCount = countMessages(tripId);
}
const notice = getDeprecationNotice();
const result = ok({
return ok({
...(notice ? { _deprecation_notice: notice } : {}),
...summary,
reservations: canReadRes ? summary.reservations : undefined,
packing: canReadPacking ? summary.packing : undefined,
@@ -181,8 +182,6 @@ export function registerTripTools(server: McpServer, userId: number, scopes: str
pollCount,
messageCount,
});
if (notice) return { content: [{ type: 'text' as const, text: notice }, ...result.content] };
return result;
}
);