Skip to content

Commit 6730edb

Browse files
authored
use json string to store mcp payload (Kong#9631)
1 parent 7e71c24 commit 6730edb

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

packages/insomnia/src/models/mcp-request-payload.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export const canDuplicate = true;
1212
export const canSync = false;
1313

1414
export interface BaseMcpPayload {
15-
params?: Record<string, any>;
15+
params?: string | Record<string, any>;
1616
url: string;
1717
}
1818

packages/insomnia/src/ui/components/mcp/mcp-request-pane.tsx

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { useLatest } from 'react-use';
88
import { docsMcpClient } from '~/common/documentation';
99
import { buildResourceJsonSchema, fillUriTemplate } from '~/common/mcp-utils';
1010
import type { McpReadyState } from '~/main/mcp/types';
11+
import type { BaseMcpPayload } from '~/models/mcp-request-payload';
1112
import { useWorkspaceLoaderData } from '~/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId';
1213
import { Link } from '~/ui/components/base/link';
1314
import { EnvironmentKVEditor } from '~/ui/components/editors/environment-key-value-editor/key-value-editor';
@@ -57,6 +58,22 @@ interface Props {
5758
onTabChange: (newTab: RequestPaneTabs) => void;
5859
}
5960

61+
const getParamsFromPayload = (payloadParams: BaseMcpPayload['params']) => {
62+
// INS-2041 params has been changed from object to json string to avoid param name with dot issue
63+
// For existing payload, we need to handle both string and object type
64+
if (typeof payloadParams === 'string') {
65+
try {
66+
return JSON.parse(payloadParams);
67+
} catch (error) {
68+
console.warn('Failed to parse MCP params string:', error);
69+
return {};
70+
}
71+
} else if (typeof payloadParams === 'object') {
72+
return payloadParams;
73+
}
74+
return {};
75+
};
76+
6077
export const McpRequestPane: FC<Props> = ({
6178
environment,
6279
readyState,
@@ -70,7 +87,7 @@ export const McpRequestPane: FC<Props> = ({
7087

7188
const { activeProject } = useWorkspaceLoaderData()!;
7289

73-
const [mcpParams, setMcpParams] = useState<Record<string, any>>(requestPayload?.params || {});
90+
const [mcpParams, setMcpParams] = useState<Record<string, any>>(getParamsFromPayload(requestPayload?.params));
7491

7592
const paramEditorRef = useRef<CodeEditorHandle>(null);
7693
const rjsfFormRef = useRef<InsomniaRjsfFormHandle>(null);
@@ -196,13 +213,13 @@ export const McpRequestPane: FC<Props> = ({
196213

197214
useEffect(() => {
198215
if (isConnected) {
199-
latestPayloadPatcherRef.current(requestId, { params: mcpParams, url: activeRequest.url });
216+
latestPayloadPatcherRef.current(requestId, { params: JSON.stringify(mcpParams), url: activeRequest.url });
200217
}
201218
}, [activeRequest.url, mcpParams, latestPayloadPatcherRef, requestId, isConnected]);
202219

203220
useEffect(() => {
204221
if (isConnected) {
205-
setMcpParams(latestRequestPayloadRef.current?.params || {});
222+
setMcpParams(getParamsFromPayload(latestRequestPayloadRef.current?.params));
206223
}
207224
}, [activeRequest.url, latestRequestPayloadRef, isConnected]);
208225

0 commit comments

Comments
 (0)