figma-mcp-server 2.0.0 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/LICENSE +1 -2
  2. package/README.md +37 -11
  3. package/bun.lock +80 -34
  4. package/commands/tools.ts +87 -0
  5. package/{index.js → index.ts} +2 -2
  6. package/lib/tools.ts +38 -0
  7. package/mcpServer.ts +186 -0
  8. package/package.json +22 -12
  9. package/preview.webp +0 -0
  10. package/tools/figma/figma-api/{create-dev-resources-for-a-file.js → create-dev-resources-for-a-file.ts} +9 -11
  11. package/tools/figma/figma-api/{create-variable-collections-for-a-file.js → create-variable-collections-for-a-file.ts} +7 -9
  12. package/tools/figma/figma-api/{get-a-published-component-by-key.js → get-a-published-component-by-key.ts} +7 -9
  13. package/tools/figma/figma-api/{get-a-published-component-set-by-key.js → get-a-published-component-set-by-key.ts} +7 -9
  14. package/tools/figma/figma-api/{get-a-published-library-by-id.js → get-a-published-library-by-id.ts} +7 -9
  15. package/tools/figma/figma-api/{get-a-published-style-by-key.js → get-a-published-style-by-key.ts} +7 -9
  16. package/tools/figma/figma-api/{get-current-user.js → get-current-user.ts} +6 -8
  17. package/tools/figma/figma-api/{get-file-nodes.js → get-file-nodes.ts} +7 -9
  18. package/tools/figma/figma-api/{get-file-version-history.js → get-file-version-history.ts} +7 -9
  19. package/tools/figma/figma-api/{get-file.js → get-file.ts} +7 -9
  20. package/tools/figma/figma-api/{get-image-fills.js → get-image-fills.ts} +7 -9
  21. package/tools/figma/figma-api/{get-library-action-analytics.js → get-library-action-analytics.ts} +7 -9
  22. package/tools/figma/figma-api/{get-library-usage-analytics.js → get-library-usage-analytics.ts} +7 -9
  23. package/tools/figma/figma-api/{list-comments-on-a-file.js → list-comments-on-a-file.ts} +8 -10
  24. package/tools/figma/figma-api/{list-component-sets-in-a-file.js → list-component-sets-in-a-file.ts} +7 -9
  25. package/tools/figma/figma-api/{list-components-in-a-file.js → list-components-in-a-file.ts} +7 -9
  26. package/tools/figma/figma-api/{list-dev-resources-for-a-file.js → list-dev-resources-for-a-file.ts} +7 -9
  27. package/tools/figma/figma-api/{list-files-in-a-project.js → list-files-in-a-project.ts} +7 -9
  28. package/tools/figma/figma-api/{list-projects-in-a-team.js → list-projects-in-a-team.ts} +7 -9
  29. package/tools/figma/figma-api/{list-published-libraries.js → list-published-libraries.ts} +6 -8
  30. package/tools/figma/figma-api/{list-styles-in-a-file.js → list-styles-in-a-file.ts} +7 -9
  31. package/tools/figma/figma-api/{list-variables-for-a-file.js → list-variables-for-a-file.ts} +7 -9
  32. package/tools/figma/figma-api/{post-a-comment-to-a-file.js → post-a-comment-to-a-file.ts} +7 -9
  33. package/tools/paths.ts +25 -0
  34. package/tsconfig.json +28 -0
  35. package/commands/tools.js +0 -65
  36. package/lib/tools.js +0 -12
  37. package/mcpServer.js +0 -170
  38. package/tools/paths.js +0 -25
package/mcpServer.js DELETED
@@ -1,170 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- import dotenv from "dotenv";
4
- import express from "express";
5
- import { Server } from "@modelcontextprotocol/sdk/server/index.js";
6
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
7
- import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
8
- import {
9
- CallToolRequestSchema,
10
- ErrorCode,
11
- ListToolsRequestSchema,
12
- McpError,
13
- } from "@modelcontextprotocol/sdk/types.js";
14
- import { discoverTools } from "./lib/tools.js";
15
-
16
- import path from "path";
17
- import { fileURLToPath } from "url";
18
-
19
- const __filename = fileURLToPath(import.meta.url);
20
- const __dirname = path.dirname(__filename);
21
-
22
- dotenv.config({ path: path.resolve(__dirname, ".env") });
23
-
24
- const SERVER_NAME = process.env.SERVER_NAME || "figma-mcp-server";
25
- const SERVER_VERSION = process.env.SERVER_VERSION || "0.1.2";
26
- const DEFAULT_PORT = 3001;
27
-
28
- async function transformTools(tools) {
29
- return tools
30
- .map((tool) => {
31
- const definitionFunction = tool.definition?.function;
32
- if (!definitionFunction) return;
33
- return {
34
- name: definitionFunction.name,
35
- description: definitionFunction.description,
36
- inputSchema: definitionFunction.parameters,
37
- };
38
- })
39
- .filter(Boolean);
40
- }
41
-
42
- async function setupServerHandlers(server, tools, transformedTools) {
43
- const toolMap = new Map(
44
- tools.map((tool) => [tool.definition.function.name, tool])
45
- );
46
-
47
- server.setRequestHandler(ListToolsRequestSchema, async () => ({
48
- tools: transformedTools,
49
- }));
50
-
51
- server.setRequestHandler(CallToolRequestSchema, async (request) => {
52
- const toolName = request.params.name;
53
- const tool = toolMap.get(toolName);
54
- if (!tool) {
55
- throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${toolName}`);
56
- }
57
- const args = request.params.arguments;
58
- const requiredParameters =
59
- tool.definition?.function?.parameters?.required || [];
60
- for (const requiredParameter of requiredParameters) {
61
- if (!(requiredParameter in args)) {
62
- throw new McpError(
63
- ErrorCode.InvalidParams,
64
- `Missing required parameter: ${requiredParameter}`
65
- );
66
- }
67
- }
68
- try {
69
- const result = await tool.function(args);
70
- return {
71
- content: [
72
- {
73
- type: "text",
74
- text: JSON.stringify(result, null, 2),
75
- },
76
- ],
77
- };
78
- } catch (error) {
79
- console.error("[Error] Failed to fetch data:", error);
80
- throw new McpError(
81
- ErrorCode.InternalError,
82
- `API error: ${error.message}`
83
- );
84
- }
85
- });
86
- }
87
-
88
- async function run() {
89
- const args = process.argv.slice(2);
90
- const isSSE = args.includes("--sse");
91
- const tools = await discoverTools();
92
- const transformedTools = await transformTools(tools);
93
-
94
- if (isSSE) {
95
- const app = express();
96
- const transports = {};
97
- const servers = {};
98
-
99
- app.get("/sse", async (_req, res) => {
100
- const server = new Server(
101
- {
102
- name: SERVER_NAME,
103
- version: SERVER_VERSION,
104
- },
105
- {
106
- capabilities: {
107
- tools: {},
108
- },
109
- }
110
- );
111
- server.onerror = (error) => console.error("[Error]", error);
112
- await setupServerHandlers(server, tools, transformedTools);
113
-
114
- const transport = new SSEServerTransport("/messages", res);
115
- transports[transport.sessionId] = transport;
116
- servers[transport.sessionId] = server;
117
-
118
- res.on("close", async () => {
119
- delete transports[transport.sessionId];
120
- await server.close();
121
- delete servers[transport.sessionId];
122
- });
123
-
124
- await server.connect(transport);
125
- });
126
-
127
- app.post("/messages", async (req, res) => {
128
- const sessionId = req.query.sessionId;
129
- const transport = transports[sessionId];
130
- const server = servers[sessionId];
131
-
132
- if (transport && server) {
133
- await transport.handlePostMessage(req, res);
134
- } else {
135
- res.status(400).send("No transport/server found for sessionId");
136
- }
137
- });
138
-
139
- const port = process.env.PORT || DEFAULT_PORT;
140
- app.listen(port, () => {
141
- console.log(`[SSE Server] running on port ${port}`);
142
- console.log(`[Server] Name: ${SERVER_NAME}`);
143
- console.log(`[Server] Version: ${SERVER_VERSION}`);
144
- });
145
- } else {
146
- const server = new Server(
147
- {
148
- name: SERVER_NAME,
149
- version: SERVER_VERSION,
150
- },
151
- {
152
- capabilities: {
153
- tools: {},
154
- },
155
- }
156
- );
157
- server.onerror = (error) => console.error("[Error]", error);
158
- await setupServerHandlers(server, tools, transformedTools);
159
-
160
- process.on("SIGINT", async () => {
161
- await server.close();
162
- process.exit(0);
163
- });
164
-
165
- const transport = new StdioServerTransport();
166
- await server.connect(transport);
167
- }
168
- }
169
-
170
- run().catch(console.error);
package/tools/paths.js DELETED
@@ -1,25 +0,0 @@
1
- export const toolPaths = [
2
- 'figma/figma-api/list-published-libraries.js',
3
- 'figma/figma-api/get-a-published-component-by-key.js',
4
- 'figma/figma-api/get-file.js',
5
- 'figma/figma-api/list-component-sets-in-a-file.js',
6
- 'figma/figma-api/list-dev-resources-for-a-file.js',
7
- 'figma/figma-api/get-a-published-library-by-id.js',
8
- 'figma/figma-api/list-components-in-a-file.js',
9
- 'figma/figma-api/get-library-usage-analytics.js',
10
- 'figma/figma-api/list-comments-on-a-file.js',
11
- 'figma/figma-api/get-image-fills.js',
12
- 'figma/figma-api/list-variables-for-a-file.js',
13
- 'figma/figma-api/get-file-version-history.js',
14
- 'figma/figma-api/list-files-in-a-project.js',
15
- 'figma/figma-api/get-library-action-analytics.js',
16
- 'figma/figma-api/create-variable-collections-for-a-file.js',
17
- 'figma/figma-api/get-file-nodes.js',
18
- 'figma/figma-api/get-a-published-style-by-key.js',
19
- 'figma/figma-api/get-current-user.js',
20
- 'figma/figma-api/create-dev-resources-for-a-file.js',
21
- 'figma/figma-api/list-styles-in-a-file.js',
22
- 'figma/figma-api/list-projects-in-a-team.js',
23
- 'figma/figma-api/get-a-published-component-set-by-key.js',
24
- 'figma/figma-api/post-a-comment-to-a-file.js'
25
- ];