example.ts 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import { createClient, listPrimitives } from "@/app/mcp/client";
  2. import { MCPClientLogger } from "@/app/mcp/logger";
  3. import { z } from "zod";
  4. import { MCP_CONF } from "@/app/mcp/mcp_config";
  5. const logger = new MCPClientLogger("MCP FS Example", true);
  6. const ListAllowedDirectoriesResultSchema = z.object({
  7. content: z.array(
  8. z.object({
  9. type: z.string(),
  10. text: z.string(),
  11. }),
  12. ),
  13. });
  14. const ReadFileResultSchema = z.object({
  15. content: z.array(
  16. z.object({
  17. type: z.string(),
  18. text: z.string(),
  19. }),
  20. ),
  21. });
  22. async function main() {
  23. logger.info("Connecting to server...");
  24. const client = await createClient(MCP_CONF.filesystem, "fs");
  25. const primitives = await listPrimitives(client);
  26. logger.success(`Connected to server fs`);
  27. logger.info(
  28. `server capabilities: ${Object.keys(
  29. client.getServerCapabilities() ?? [],
  30. ).join(", ")}`,
  31. );
  32. logger.debug("Server supports the following primitives:");
  33. primitives.forEach((primitive) => {
  34. logger.debug("\n" + JSON.stringify(primitive, null, 2));
  35. });
  36. const listAllowedDirectories = async () => {
  37. const result = await client.request(
  38. {
  39. method: "tools/call",
  40. params: {
  41. name: "list_allowed_directories",
  42. arguments: {},
  43. },
  44. },
  45. ListAllowedDirectoriesResultSchema,
  46. );
  47. logger.success(`Allowed directories: ${result.content[0].text}`);
  48. return result;
  49. };
  50. const readFile = async (path: string) => {
  51. const result = await client.request(
  52. {
  53. method: "tools/call",
  54. params: {
  55. name: "read_file",
  56. arguments: {
  57. path: path,
  58. },
  59. },
  60. },
  61. ReadFileResultSchema,
  62. );
  63. logger.success(`File contents for ${path}:\n${result.content[0].text}`);
  64. return result;
  65. };
  66. try {
  67. logger.info("Example 1: List allowed directories\n");
  68. await listAllowedDirectories();
  69. logger.info("\nExample 2: Read a file\n");
  70. await readFile("/users/kadxy/desktop/test.txt");
  71. } catch (error) {
  72. logger.error(`Error executing examples: ${error}`);
  73. }
  74. }
  75. main().catch((error) => {
  76. logger.error(error);
  77. process.exit(1);
  78. });