chore: prepare GoodBuddy 0.8.5

This commit is contained in:
lofyer
2026-08-07 10:45:01 +08:00
parent e20cb447af
commit 17e66a3369
54 changed files with 1306 additions and 1640 deletions
+2 -35
View File
@@ -1,42 +1,13 @@
import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js'
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js'
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js'
import type {
FetchLike,
Transport
} from '@modelcontextprotocol/sdk/shared/transport.js'
import type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js'
import type { ResolvedMcpServer } from './capability-service'
import {
isCuratedMcpLaunchDescriptor,
type CuratedMcpLaunchDescriptor
} from './curated-mcp-launch'
function validateRemoteUrl(value: string): URL {
const url = new URL(value)
const hostname = url.hostname.toLowerCase().replace(/^\[|\]$/gu, '')
if (
hostname === '169.254.169.254' ||
hostname === 'metadata.google.internal' ||
hostname.endsWith('.internal.metadata')
) {
throw new Error('MCP 地址不能指向云平台元数据服务')
}
return url
}
function createRestrictedFetch(origin: string): FetchLike {
return async (input, init) => {
const url = new URL(String(input))
if (url.origin !== origin) {
throw new Error('MCP Server 尝试访问未授权的跨域地址')
}
return fetch(url, {
...init,
redirect: 'error'
})
}
}
export function createMcpTransport(
server: ResolvedMcpServer | CuratedMcpLaunchDescriptor
): Transport {
@@ -64,7 +35,7 @@ export function createMcpTransport(
})
}
const url = validateRemoteUrl(server.url)
const url = new URL(server.url)
const requestInit: RequestInit | undefined = server.secret
? {
headers: {
@@ -72,11 +43,8 @@ export function createMcpTransport(
}
}
: undefined
const safeFetch = createRestrictedFetch(url.origin)
return server.transport === 'http'
? new StreamableHTTPClientTransport(url, {
fetch: safeFetch,
requestInit,
reconnectionOptions: {
initialReconnectionDelay: 500,
@@ -86,7 +54,6 @@ export function createMcpTransport(
}
})
: new SSEClientTransport(url, {
fetch: safeFetch,
requestInit
})
}