

























@@ -67,9 +67,10 @@ export async function listConfiguredMcpServers(): Promise<ConfigMcpReadResult> {
6767};
6868}
696970-export async function updateConfiguredMcpServerTools(params: {
70+async function updateConfiguredMcpServerConfig(params: {
7171name: string;
72-tools: McpServerToolSelection | null;
72+update: (server: Record<string, unknown>) => Record<string, unknown>;
73+errorLabel: string;
7374}): Promise<ConfigMcpWriteResult> {
7475const name = params.name.trim();
7576if (!name) {
@@ -92,22 +93,7 @@ export async function updateConfiguredMcpServerTools(params: {
92939394const next = structuredClone(loaded.config);
9495const servers = normalizeConfiguredMcpServers(next.mcp?.servers);
95-const server = { ...servers[name] };
96-if (params.tools === null) {
97-delete server.toolFilter;
98-} else {
99-const include = normalizeToolSelectionList(params.tools.include);
100-const exclude = normalizeToolSelectionList(params.tools.exclude);
101-if (include || exclude) {
102-server.toolFilter = {
103- ...(include ? { include } : {}),
104- ...(exclude ? { exclude } : {}),
105-};
106-} else {
107-delete server.toolFilter;
108-}
109-}
110-servers[name] = server;
96+servers[name] = params.update({ ...servers[name] });
11197next.mcp = {
11298 ...next.mcp,
11399 servers,
@@ -119,7 +105,7 @@ export async function updateConfiguredMcpServerTools(params: {
119105return {
120106ok: false,
121107path: loaded.path,
122-error: `Config invalid after MCP tool selection update (${issue.path}: ${issue.message}).`,
108+error: `Config invalid after MCP ${params.errorLabel} (${issue.path}: ${issue.message}).`,
123109};
124110}
125111await replaceConfigFile({
@@ -135,57 +121,42 @@ export async function updateConfiguredMcpServerTools(params: {
135121};
136122}
137123124+export async function updateConfiguredMcpServerTools(params: {
125+name: string;
126+tools: McpServerToolSelection | null;
127+}): Promise<ConfigMcpWriteResult> {
128+return updateConfiguredMcpServerConfig({
129+name: params.name,
130+errorLabel: "tool selection update",
131+update: (server) => {
132+if (params.tools === null) {
133+delete server.toolFilter;
134+} else {
135+const include = normalizeToolSelectionList(params.tools.include);
136+const exclude = normalizeToolSelectionList(params.tools.exclude);
137+if (include || exclude) {
138+server.toolFilter = {
139+ ...(include ? { include } : {}),
140+ ...(exclude ? { exclude } : {}),
141+};
142+} else {
143+delete server.toolFilter;
144+}
145+}
146+return server;
147+},
148+});
149+}
150+138151export async function updateConfiguredMcpServer(params: {
139152name: string;
140153update: (server: Record<string, unknown>) => Record<string, unknown>;
141154}): Promise<ConfigMcpWriteResult> {
142-const name = params.name.trim();
143-if (!name) {
144-return { ok: false, path: "", error: "MCP server name is required." };
145-}
146-147-const loaded = await listConfiguredMcpServers();
148-if (!loaded.ok) {
149-return loaded;
150-}
151-if (!Object.hasOwn(loaded.mcpServers, name)) {
152-return {
153-ok: true,
154-path: loaded.path,
155-config: loaded.config,
156-mcpServers: loaded.mcpServers,
157-updated: false,
158-};
159-}
160-161-const next = structuredClone(loaded.config);
162-const servers = normalizeConfiguredMcpServers(next.mcp?.servers);
163-servers[name] = canonicalizeConfiguredMcpServer(params.update({ ...servers[name] }));
164-next.mcp = {
165- ...next.mcp,
166- servers,
167-};
168-169-const validated = validateConfigObjectWithPlugins(next);
170-if (!validated.ok) {
171-const issue = validated.issues[0];
172-return {
173-ok: false,
174-path: loaded.path,
175-error: `Config invalid after MCP configure (${issue.path}: ${issue.message}).`,
176-};
177-}
178-await replaceConfigFile({
179-nextConfig: validated.config,
180-baseHash: loaded.baseHash,
155+return updateConfiguredMcpServerConfig({
156+name: params.name,
157+errorLabel: "configure",
158+update: (server) => canonicalizeConfiguredMcpServer(params.update(server)),
181159});
182-return {
183-ok: true,
184-path: loaded.path,
185-config: validated.config,
186-mcpServers: servers,
187-updated: true,
188-};
189160}
190161191162export async function setConfiguredMcpServer(params: {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。