343572bf5d
library-map SDD M4(design §4,源頭 #39)。兩件: 1. kbdb_get_map(tools/kbdb_map.ts,與 #68 kbdb_graph_neighbors 同族薄殼): - 無參數=全館地圖(每庫一行:library+narrative+top 3 entities+triplet_count) - 帶 library=該庫詳圖;top_entities/relation_profile/bridges 若為 JSON 字串形 容錯 parse 成物件(parse 失敗當空陣列,不 crash) - 404/空庫誠實回報+POST /map/recompute backfill 指引 - 走既有 KBDB service binding(kbdbFetch),不碰 D1、不新增 binding 2. instructions 注入(lib/library-map.ts+mcp-handler.ts): - 連線時拉 GET /map,渲染成緊湊文字({library}:{narrative}|核心:{top3}|{n} triplets) 嵌 server instructions(design §6:session 啟動 push 零查詢) - 快取選型:isolate 內 TTL 快取(成功 5min/失敗 1min)——stateless StreamableHTTP 每個 HTTP request 重建 McpServer,「每次現拉」實際是每個 tool call 都多打一次 /map - timeout 1.5s;任何失敗(超時/HTTP錯/空庫/壞JSON)回 null 靜默略過,絕不擋 MCP 連線(鐵律) 測試:假 KBDB binding(比照 kbdb-graph.test.ts)17 新測,pnpm vitest run 76/76 過、tsc --noEmit 乾淨。 merge 後需 gated redeploy arcrun-mcp(leo 閘)。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JUmjwkHLVBHM3ydhT1WSW3
29 lines
1.3 KiB
TypeScript
29 lines
1.3 KiB
TypeScript
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
||
import { WebStandardStreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";
|
||
import { registerAllTools } from "./tools/registry.js";
|
||
import { buildLibraryMapInstructions } from "./lib/library-map.js";
|
||
import { Env } from "./types.js";
|
||
|
||
export async function handleMcpRequest(
|
||
request: Request,
|
||
env: Env,
|
||
orgNamespace: string,
|
||
partnerToken: string,
|
||
): Promise<Response> {
|
||
// library-map SDD M4(design §4/§6):連線時把全館藏書地圖嵌進 server instructions,
|
||
// session 一開就知道館裡有哪些庫(push 零查詢)。builder 內建 timeout+isolate TTL 快取
|
||
//(選型理由見 lib/library-map.ts 檔頭);任何失敗回 null → 靜默略過,絕不擋 MCP 連線(鐵律)。
|
||
const mapInstructions = await buildLibraryMapInstructions(env);
|
||
|
||
const transport = new WebStandardStreamableHTTPServerTransport({ sessionIdGenerator: undefined });
|
||
const server = new McpServer(
|
||
{ name: "arcrun-mcp-server", version: "1.0.0" },
|
||
mapInstructions ? { instructions: mapInstructions } : undefined,
|
||
);
|
||
|
||
registerAllTools(server, env, orgNamespace, partnerToken);
|
||
await server.connect(transport);
|
||
|
||
return transport.handleRequest(request);
|
||
}
|