36 lines
1.3 KiB
TypeScript
36 lines
1.3 KiB
TypeScript
import { writeFile } from "node:fs/promises";
|
|
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
import { InMemoryTransport } from "@modelcontextprotocol/sdk/inMemory.js";
|
|
import { createMcp, commandReference, scriptReference } from "../server/mcp.ts";
|
|
import { ProjectStore } from "../engine/store.ts";
|
|
import { emptyProject } from "../engine/schema.ts";
|
|
// Enumerate the real registration schemas without opening ports or touching user projects.
|
|
const unavailable = async () => {
|
|
throw Error("Documentation generator cannot execute tools");
|
|
};
|
|
const server = createMcp({
|
|
store: new ProjectStore(emptyProject()),
|
|
status: () => ({}),
|
|
save: unavailable,
|
|
exportWeb: unavailable,
|
|
importModel: unavailable,
|
|
importImage: unavailable,
|
|
runtime: unavailable,
|
|
});
|
|
const client = new Client({ name: "forma-reference", version: "1" }),
|
|
[a, b] = InMemoryTransport.createLinkedPair();
|
|
try {
|
|
await server.connect(a);
|
|
await client.connect(b);
|
|
const tools = await client.listTools();
|
|
for (const [name, data] of [
|
|
["COMMANDS", commandReference],
|
|
["SCRIPT_API", scriptReference],
|
|
["MCP_TOOLS", tools],
|
|
] as const)
|
|
await writeFile(`docs/${name}.json`, JSON.stringify(data, null, 2) + "\n");
|
|
} finally {
|
|
await client.close();
|
|
await server.close();
|
|
}
|