Skip to content

Commit 2dd7ac3

Browse files
authored
Merge pull request #671 from TencentCloudBase/automation/attribution-issue-mojcryx3-5bwnmf-mcp-managegateway-querygateway-envid
fix: MCP manageGateway/queryGateway 工具 envId 绑定失效,导致模型浪费大量轮次
2 parents e2ca73f + 4cb81df commit 2dd7ac3

2 files changed

Lines changed: 15 additions & 15 deletions

File tree

mcp/src/tools/gateway.test.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ const {
1414
mockDeleteCustomDomain,
1515
mockGetCloudBaseManager,
1616
mockLogCloudBaseResult,
17+
mockGetEnvId,
1718
} = vi.hoisted(() => ({
1819
mockGetAccessList: vi.fn(),
1920
mockGetDomainList: vi.fn(),
@@ -26,11 +27,13 @@ const {
2627
mockDeleteCustomDomain: vi.fn(),
2728
mockGetCloudBaseManager: vi.fn(),
2829
mockLogCloudBaseResult: vi.fn(),
30+
mockGetEnvId: vi.fn(),
2931
}));
3032

3133
vi.mock("../cloudbase-manager.js", () => ({
3234
getCloudBaseManager: mockGetCloudBaseManager,
3335
logCloudBaseResult: mockLogCloudBaseResult,
36+
getEnvId: mockGetEnvId,
3437
}));
3538

3639
function createMockServer() {
@@ -66,6 +69,7 @@ describe("gateway tools", () => {
6669
beforeEach(() => {
6770
vi.clearAllMocks();
6871

72+
mockGetEnvId.mockResolvedValue("env-test");
6973
mockGetAccessList.mockResolvedValue({
7074
Total: 1,
7175
EnableService: true,

mcp/src/tools/gateway.ts

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
import { z } from "zod";
2-
import { getCloudBaseManager, logCloudBaseResult } from "../cloudbase-manager.js";
2+
import {
3+
getCloudBaseManager,
4+
getEnvId,
5+
logCloudBaseResult,
6+
} from "../cloudbase-manager.js";
37
import { ExtendedMcpServer } from "../server.js";
48
import { jsonContent } from "../utils/json-content.js";
59

@@ -71,18 +75,10 @@ function normalizeAccessPath(path: string | undefined): string {
7175
return path.startsWith("/") ? path : `/${path}`;
7276
}
7377

74-
function ensureGatewayEnvId(cloudBaseOptions?: { envId?: string }) {
75-
const envId = cloudBaseOptions?.envId;
76-
if (!envId) {
77-
throw new Error("当前网关操作需要已绑定 envId");
78-
}
79-
return envId;
80-
}
81-
8278
export function registerGatewayTools(server: ExtendedMcpServer) {
8379
const cloudBaseOptions = server.cloudBaseOptions;
8480
const getManager = () => getCloudBaseManager({ cloudBaseOptions });
85-
const getGatewayEnvId = () => ensureGatewayEnvId(cloudBaseOptions);
81+
const resolveEnvId = () => getEnvId(cloudBaseOptions);
8682

8783
const buildEnvelope = (
8884
data: Record<string, unknown>,
@@ -129,7 +125,7 @@ export function registerGatewayTools(server: ExtendedMcpServer) {
129125
const listHttpServiceRoutes = async (domain?: string) => {
130126
const cloudbase = await getManager();
131127
const result = await cloudbase.env.describeHttpServiceRoute({
132-
EnvId: getGatewayEnvId(),
128+
EnvId: await resolveEnvId(),
133129
...(domain
134130
? {
135131
Filters: [
@@ -177,7 +173,7 @@ export function registerGatewayTools(server: ExtendedMcpServer) {
177173
}
178174

179175
return {
180-
EnvId: getGatewayEnvId(),
176+
EnvId: await resolveEnvId(),
181177
Domain: {
182178
Domain: await resolveRouteDomain(domain),
183179
Routes: [
@@ -423,7 +419,7 @@ export function registerGatewayTools(server: ExtendedMcpServer) {
423419
const cloudbase = await getManager();
424420
const domain = await resolveRouteDomain(input.domain);
425421
const result = await cloudbase.env.deleteHttpServiceRoute({
426-
EnvId: getGatewayEnvId(),
422+
EnvId: await resolveEnvId(),
427423
Domain: domain,
428424
Paths: [normalizeAccessPath(routePath)],
429425
} as any);
@@ -445,7 +441,7 @@ export function registerGatewayTools(server: ExtendedMcpServer) {
445441
}
446442
const cloudbase = await getManager();
447443
const result = await cloudbase.env.bindCustomDomain({
448-
EnvId: getGatewayEnvId(),
444+
EnvId: await resolveEnvId(),
449445
Domain: {
450446
Domain: input.domain,
451447
CertId: input.certificateId,
@@ -469,7 +465,7 @@ export function registerGatewayTools(server: ExtendedMcpServer) {
469465
}
470466
const cloudbase = await getManager();
471467
const result = await cloudbase.env.deleteCustomDomain({
472-
EnvId: getGatewayEnvId(),
468+
EnvId: await resolveEnvId(),
473469
Domain: input.domain,
474470
});
475471
logCloudBaseResult(server.logger, result);

0 commit comments

Comments
 (0)