lanhu-mcp-read.mjs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { Client } from 'file:///C:/Users/qmj/AppData/Roaming/npm/node_modules/mcp-lanhu/node_modules/@modelcontextprotocol/sdk/dist/esm/client/index.js';
  2. import { StdioClientTransport } from 'file:///C:/Users/qmj/AppData/Roaming/npm/node_modules/mcp-lanhu/node_modules/@modelcontextprotocol/sdk/dist/esm/client/stdio.js';
  3. import { mkdir, writeFile } from 'node:fs/promises';
  4. const projectUrl = 'https://lanhuapp.com/web/#/item/project/stage?tid=15517692-8265-47f1-9ba9-7616f57c770f&pid=498cd54f-39c7-4fcc-abf7-cb4e8fcb8f61&corpId=null';
  5. const transport = new StdioClientTransport({
  6. command: 'C:\\Users\\qmj\\AppData\\Roaming\\npm\\mcp-lanhu.cmd',
  7. args: [],
  8. env: process.env
  9. });
  10. const client = new Client({ name: 'codex-lanhu-reader', version: '1.0.0' });
  11. await client.connect(transport);
  12. try {
  13. const result = await client.callTool({
  14. name: 'lanhu_design',
  15. arguments: {
  16. url: projectUrl,
  17. mode: 'analyze',
  18. design_names: ['1', '2', '3', '4', '5', '6', '7'],
  19. include: ['image', 'tokens', 'layout', 'layers'],
  20. layer_depth: 2
  21. }
  22. });
  23. const payload = result.structuredContent ?? {};
  24. const designs = Array.isArray(payload.designs) ? payload.designs : [];
  25. const outDir = new URL('./lanhu-flash-delivery/', import.meta.url);
  26. await mkdir(outDir, { recursive: true });
  27. const images = result.content?.filter(item => item.type === 'image') ?? [];
  28. for (let index = 0; index < images.length; index += 1) {
  29. await writeFile(new URL(`mcp-${String(index + 1).padStart(2, '0')}.png`, outDir), Buffer.from(images[index].data, 'base64'));
  30. }
  31. await writeFile(new URL('analysis.json', outDir), JSON.stringify(payload, null, 2), 'utf8');
  32. console.log(JSON.stringify({
  33. isError: Boolean(result.isError),
  34. projectName: payload.project_name ?? null,
  35. status: payload.status ?? null,
  36. totalDesigns: payload.total_designs ?? designs.length,
  37. imageCount: images.length,
  38. designs: designs.map(item => ({
  39. name: item.name,
  40. status: item.status,
  41. outputs: item.outputs,
  42. layerDepth: item.layer_depth,
  43. layerTreeTruncated: item.layer_tree_truncated
  44. }))
  45. }));
  46. } finally {
  47. await client.close();
  48. }