Skip to content

Commit 4b73b5f

Browse files
ochafikclaude
andcommitted
Add wiki-explorer to E2E tests with default URL param
- Add default URL "https://en.wikipedia.org/wiki/Model_Context_Protocol" to wiki-explorer-server's get-first-degree-links tool inputSchema - Update basic-host to automatically populate input field with tool defaults extracted from inputSchema.properties - Add wiki-explorer-server to E2E test suite with dynamic masking for the force-directed graph 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
1 parent 13dde97 commit 4b73b5f

File tree

4 files changed

+37
-2
lines changed

4 files changed

+37
-2
lines changed

examples/basic-host/src/index.tsx

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,30 @@
1+
import type { Tool } from "@modelcontextprotocol/sdk/types.js";
12
import { Component, type ErrorInfo, type ReactNode, StrictMode, Suspense, use, useEffect, useMemo, useRef, useState } from "react";
23
import { createRoot } from "react-dom/client";
34
import { callTool, connectToServer, hasAppHtml, initializeApp, loadSandboxProxy, log, newAppBridge, type ServerInfo, type ToolCallInfo } from "./implementation";
45
import styles from "./index.module.css";
56

67

8+
/**
9+
* Extract default values from a tool's JSON Schema inputSchema.
10+
* Returns a formatted JSON string with defaults, or "{}" if none found.
11+
*/
12+
function getToolDefaults(tool: Tool | undefined): string {
13+
if (!tool?.inputSchema?.properties) return "{}";
14+
15+
const defaults: Record<string, unknown> = {};
16+
for (const [key, prop] of Object.entries(tool.inputSchema.properties)) {
17+
if (prop && typeof prop === "object" && "default" in prop) {
18+
defaults[key] = prop.default;
19+
}
20+
}
21+
22+
return Object.keys(defaults).length > 0
23+
? JSON.stringify(defaults, null, 2)
24+
: "{}";
25+
}
26+
27+
728
// Host passes serversPromise to CallToolPanel
829
interface HostProps {
930
serversPromise: Promise<ServerInfo[]>;
@@ -50,6 +71,14 @@ function CallToolPanel({ serversPromise, addToolCall }: CallToolPanelProps) {
5071
setSelectedServer(server);
5172
const [firstTool] = server.tools.keys();
5273
setSelectedTool(firstTool ?? "");
74+
// Set input JSON to tool defaults (if any)
75+
setInputJson(getToolDefaults(server.tools.get(firstTool ?? "")));
76+
};
77+
78+
const handleToolSelect = (toolName: string) => {
79+
setSelectedTool(toolName);
80+
// Set input JSON to tool defaults (if any)
81+
setInputJson(getToolDefaults(selectedServer?.tools.get(toolName)));
5382
};
5483

5584
const handleSubmit = () => {
@@ -72,7 +101,7 @@ function CallToolPanel({ serversPromise, addToolCall }: CallToolPanelProps) {
72101
<select
73102
className={styles.toolSelect}
74103
value={selectedTool}
75-
onChange={(e) => setSelectedTool(e.target.value)}
104+
onChange={(e) => handleToolSelect(e.target.value)}
76105
>
77106
{selectedServer && toolNames.map((name) => (
78107
<option key={name} value={name}>{name}</option>

examples/wiki-explorer-server/server.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,11 @@ const server = new McpServer({
8686
description:
8787
"Returns all Wikipedia pages that the given page links to directly.",
8888
inputSchema: z.object({
89-
url: z.string().url().describe("Wikipedia page URL"),
89+
url: z
90+
.string()
91+
.url()
92+
.default("https://en.wikipedia.org/wiki/Model_Context_Protocol")
93+
.describe("Wikipedia page URL"),
9094
}),
9195
_meta: { [RESOURCE_URI_META_KEY]: resourceUri },
9296
},

tests/e2e/servers.spec.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ const DYNAMIC_MASKS: Record<string, string[]> = {
1616
"#memory-bar-fill", // Memory bar fill level
1717
"#info-uptime", // System uptime
1818
],
19+
"wiki-explorer": ["#graph"], // Force-directed graph (dynamic layout)
1920
};
2021

2122
// Server configurations
@@ -36,6 +37,7 @@ const SERVERS = [
3637
{ key: "scenario-modeler", index: 5, name: "SaaS Scenario Modeler" },
3738
{ key: "system-monitor", index: 6, name: "System Monitor Server" },
3839
{ key: "threejs", index: 7, name: "Three.js Server" },
40+
{ key: "wiki-explorer", index: 8, name: "Wiki Explorer" },
3941
];
4042

4143
/**
24.7 KB
Loading

0 commit comments

Comments
 (0)