@manhq/localmcp 1.0.1 → 1.0.3
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.
- package/README.md +177 -66
- package/README.vi.md +176 -65
- package/dist/api/openapi.d.ts +21 -0
- package/dist/api/openapi.d.ts.map +1 -0
- package/dist/api/openapi.js +74 -0
- package/dist/api/openapi.js.map +1 -0
- package/dist/api/playground.d.ts +2 -0
- package/dist/api/playground.d.ts.map +1 -0
- package/dist/api/playground.js +24 -0
- package/dist/api/playground.js.map +1 -0
- package/dist/api/registry.d.ts +19 -0
- package/dist/api/registry.d.ts.map +1 -0
- package/dist/api/registry.js +20 -0
- package/dist/api/registry.js.map +1 -0
- package/dist/api/rest.d.ts +3 -0
- package/dist/api/rest.d.ts.map +1 -0
- package/dist/api/rest.js +84 -0
- package/dist/api/rest.js.map +1 -0
- package/dist/api/server-with-registry.d.ts +8 -0
- package/dist/api/server-with-registry.d.ts.map +1 -0
- package/dist/api/server-with-registry.js +43 -0
- package/dist/api/server-with-registry.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +85 -21
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +42 -4
- package/dist/index.js.map +1 -1
- package/docs/atlassian.md +145 -6
- package/docs/figma.md +145 -6
- package/docs/google-chat.md +145 -6
- package/docs/vi/atlassian.md +145 -6
- package/docs/vi/figma.md +145 -6
- package/docs/vi/google-chat.md +145 -6
- package/package.json +4 -3
package/dist/index.js
CHANGED
|
@@ -3,10 +3,13 @@ import { fileURLToPath } from "node:url";
|
|
|
3
3
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
4
4
|
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
5
5
|
import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
|
|
6
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
6
7
|
import { env } from "./shared/env.js";
|
|
7
8
|
import { registerFigmaTools } from "./services/figma/index.js";
|
|
8
9
|
import { registerAtlassianTools } from "./services/atlassian/index.js";
|
|
9
10
|
import { registerGChatTools } from "./services/google-chat/index.js";
|
|
11
|
+
import { createMcpServerWithRegistry } from "./api/server-with-registry.js";
|
|
12
|
+
import { mountRestApi } from "./api/rest.js";
|
|
10
13
|
const SERVICE_REGISTRY = {
|
|
11
14
|
figma: { register: registerFigmaTools, combinedPrefix: "figma", enabled: !!env.figma },
|
|
12
15
|
atlassian: { register: registerAtlassianTools, combinedPrefix: "atlassian", enabled: !!env.atlassian },
|
|
@@ -15,9 +18,16 @@ const SERVICE_REGISTRY = {
|
|
|
15
18
|
const activeServices = Object.entries(SERVICE_REGISTRY)
|
|
16
19
|
.filter(([, s]) => s.enabled)
|
|
17
20
|
.map(([name]) => name);
|
|
21
|
+
// Populates REST registry AND returns a connected McpServer — used for warm-up and stdio.
|
|
18
22
|
function createServiceServer(name) {
|
|
23
|
+
const server = createMcpServerWithRegistry(name, { name, version: "1.0.0" });
|
|
24
|
+
SERVICE_REGISTRY[name].register(server);
|
|
25
|
+
return server;
|
|
26
|
+
}
|
|
27
|
+
// Returns a plain McpServer without touching the REST registry — used per HTTP request
|
|
28
|
+
// so the global registry is not re-populated on every MCP call.
|
|
29
|
+
function createServiceServerOnly(name) {
|
|
19
30
|
const server = new McpServer({ name, version: "1.0.0" });
|
|
20
|
-
// Per-service path: no prefix, tools keep their base names
|
|
21
31
|
SERVICE_REGISTRY[name].register(server);
|
|
22
32
|
return server;
|
|
23
33
|
}
|
|
@@ -92,20 +102,26 @@ function makeCombinedServer() {
|
|
|
92
102
|
export function createApp() {
|
|
93
103
|
const app = express();
|
|
94
104
|
app.use(express.json());
|
|
105
|
+
// Warm up registry by creating all service servers once (no transport needed)
|
|
106
|
+
for (const name of activeServices) {
|
|
107
|
+
createServiceServer(name);
|
|
108
|
+
}
|
|
95
109
|
// Streamable HTTP — combined
|
|
96
110
|
mountMcpHandler(app, "/mcp", makeCombinedServer);
|
|
97
111
|
// Streamable HTTP — per-service: /mcp/figma, /mcp/atlassian, /mcp/google-chat
|
|
98
112
|
for (const name of activeServices) {
|
|
99
113
|
const service = name;
|
|
100
|
-
mountMcpHandler(app, `/mcp/${service}`, () =>
|
|
114
|
+
mountMcpHandler(app, `/mcp/${service}`, () => createServiceServerOnly(service));
|
|
101
115
|
}
|
|
102
116
|
// Legacy SSE (2024-11-05) — combined: GET /sse → POST /messages?sessionId=...
|
|
103
117
|
mountLegacySseHandler(app, "/sse", "/messages", makeCombinedServer);
|
|
104
118
|
// Legacy SSE — per-service: GET /sse/:service → POST /messages/:service?sessionId=...
|
|
105
119
|
for (const name of activeServices) {
|
|
106
120
|
const service = name;
|
|
107
|
-
mountLegacySseHandler(app, `/sse/${service}`, `/messages/${service}`, () =>
|
|
121
|
+
mountLegacySseHandler(app, `/sse/${service}`, `/messages/${service}`, () => createServiceServerOnly(service));
|
|
108
122
|
}
|
|
123
|
+
// REST API + Playground
|
|
124
|
+
mountRestApi(app);
|
|
109
125
|
app.get("/health", (_req, res) => {
|
|
110
126
|
res.json({
|
|
111
127
|
status: "ok",
|
|
@@ -119,6 +135,13 @@ export function createApp() {
|
|
|
119
135
|
combined: "/sse",
|
|
120
136
|
...Object.fromEntries(activeServices.map((s) => [s, `/sse/${s}`])),
|
|
121
137
|
},
|
|
138
|
+
rest: {
|
|
139
|
+
index: "/api",
|
|
140
|
+
service: "/api/:service",
|
|
141
|
+
call: "/api/:service/:tool",
|
|
142
|
+
spec: "/api/openapi.json",
|
|
143
|
+
playground: "/playground",
|
|
144
|
+
},
|
|
122
145
|
},
|
|
123
146
|
});
|
|
124
147
|
});
|
|
@@ -127,14 +150,29 @@ export function createApp() {
|
|
|
127
150
|
export function startServer() {
|
|
128
151
|
createApp().listen(env.PORT, () => {
|
|
129
152
|
const base = `http://localhost:${env.PORT}`;
|
|
153
|
+
const cliPath = fileURLToPath(new URL("cli.js", import.meta.url));
|
|
154
|
+
const stdioCmd = `${process.execPath} ${cliPath} stdio`;
|
|
130
155
|
console.log(`Local MCP server running at ${base}`);
|
|
156
|
+
console.log(``);
|
|
131
157
|
console.log(` Streamable HTTP : ${base}/mcp`);
|
|
132
|
-
console.log(` Legacy SSE : ${base}/sse
|
|
158
|
+
console.log(` Legacy SSE : ${base}/sse`);
|
|
133
159
|
for (const s of activeServices) {
|
|
134
160
|
console.log(` [${s}] ${base}/mcp/${s} | ${base}/sse/${s}`);
|
|
135
161
|
}
|
|
162
|
+
console.log(` REST API : ${base}/api`);
|
|
163
|
+
console.log(` Playground : ${base}/playground`);
|
|
164
|
+
console.log(``);
|
|
165
|
+
console.log(` stdio command : ${stdioCmd}`);
|
|
166
|
+
for (const s of activeServices) {
|
|
167
|
+
console.log(` stdio [${s}] : ${process.execPath} ${cliPath} stdio ${s}`);
|
|
168
|
+
}
|
|
136
169
|
});
|
|
137
170
|
}
|
|
171
|
+
export async function startStdio(service) {
|
|
172
|
+
const server = service ? createServiceServer(service) : makeCombinedServer();
|
|
173
|
+
const transport = new StdioServerTransport();
|
|
174
|
+
await server.connect(transport);
|
|
175
|
+
}
|
|
138
176
|
if (process.argv[1] && fileURLToPath(import.meta.url) === process.argv[1]) {
|
|
139
177
|
startServer();
|
|
140
178
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/docs/atlassian.md
CHANGED
|
@@ -33,34 +33,82 @@ http://localhost:47001/mcp/atlassian
|
|
|
33
33
|
|
|
34
34
|
## Register with AI Agents
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
Each agent supports two transports — pick whichever fits your setup:
|
|
37
|
+
|
|
38
|
+
- **HTTP** — requires the server to be running (`localmcp`). Shared across agents.
|
|
39
|
+
- **stdio** — the agent spawns the process on demand. No running server needed.
|
|
40
|
+
|
|
41
|
+
Or use `localmcp register` to set up automatically.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
### Claude Code
|
|
46
|
+
|
|
47
|
+
**HTTP** — `.claude/settings.local.json`
|
|
37
48
|
```json
|
|
38
49
|
{
|
|
39
50
|
"mcpServers": {
|
|
40
51
|
"atlassian": {
|
|
52
|
+
"type": "http",
|
|
41
53
|
"url": "http://localhost:47001/mcp/atlassian"
|
|
42
54
|
}
|
|
43
55
|
}
|
|
44
56
|
}
|
|
45
57
|
```
|
|
46
58
|
|
|
59
|
+
**stdio** — `.claude/settings.local.json`
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"mcpServers": {
|
|
63
|
+
"atlassian": {
|
|
64
|
+
"type": "stdio",
|
|
65
|
+
"command": "localmcp",
|
|
66
|
+
"args": ["stdio", "atlassian"]
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
47
72
|
Or register from the command line:
|
|
48
73
|
```bash
|
|
74
|
+
# HTTP
|
|
49
75
|
claude mcp add --transport http atlassian http://localhost:47001/mcp/atlassian
|
|
76
|
+
|
|
77
|
+
# stdio
|
|
78
|
+
claude mcp add atlassian localmcp stdio atlassian
|
|
50
79
|
```
|
|
51
80
|
|
|
52
|
-
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
### Codex
|
|
84
|
+
|
|
85
|
+
**HTTP** — `~/.codex/config.toml`
|
|
53
86
|
```toml
|
|
54
87
|
[mcp_servers.atlassian]
|
|
55
88
|
url = "http://localhost:47001/mcp/atlassian"
|
|
56
89
|
```
|
|
57
90
|
|
|
91
|
+
**stdio** — `~/.codex/config.toml`
|
|
92
|
+
```toml
|
|
93
|
+
[mcp_servers.atlassian]
|
|
94
|
+
command = "localmcp"
|
|
95
|
+
args = ["stdio", "atlassian"]
|
|
96
|
+
```
|
|
97
|
+
|
|
58
98
|
Or register from the command line:
|
|
59
99
|
```bash
|
|
100
|
+
# HTTP
|
|
60
101
|
codex mcp add atlassian --url http://localhost:47001/mcp/atlassian
|
|
102
|
+
|
|
103
|
+
# stdio
|
|
104
|
+
codex mcp add atlassian localmcp stdio atlassian
|
|
61
105
|
```
|
|
62
106
|
|
|
63
|
-
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
### GitHub Copilot / VS Code
|
|
110
|
+
|
|
111
|
+
**HTTP** — `.vscode/mcp.json`
|
|
64
112
|
```json
|
|
65
113
|
{
|
|
66
114
|
"servers": {
|
|
@@ -72,7 +120,24 @@ codex mcp add atlassian --url http://localhost:47001/mcp/atlassian
|
|
|
72
120
|
}
|
|
73
121
|
```
|
|
74
122
|
|
|
75
|
-
**
|
|
123
|
+
**stdio** — `.vscode/mcp.json`
|
|
124
|
+
```json
|
|
125
|
+
{
|
|
126
|
+
"servers": {
|
|
127
|
+
"atlassian": {
|
|
128
|
+
"type": "stdio",
|
|
129
|
+
"command": "localmcp",
|
|
130
|
+
"args": ["stdio", "atlassian"]
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
### Cursor
|
|
139
|
+
|
|
140
|
+
**HTTP** — `.cursor/mcp.json`
|
|
76
141
|
```json
|
|
77
142
|
{
|
|
78
143
|
"mcpServers": {
|
|
@@ -83,7 +148,23 @@ codex mcp add atlassian --url http://localhost:47001/mcp/atlassian
|
|
|
83
148
|
}
|
|
84
149
|
```
|
|
85
150
|
|
|
86
|
-
**
|
|
151
|
+
**stdio** — `.cursor/mcp.json`
|
|
152
|
+
```json
|
|
153
|
+
{
|
|
154
|
+
"mcpServers": {
|
|
155
|
+
"atlassian": {
|
|
156
|
+
"command": "localmcp",
|
|
157
|
+
"args": ["stdio", "atlassian"]
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
### Windsurf
|
|
166
|
+
|
|
167
|
+
**HTTP** — `~/.codeium/windsurf/mcp_config.json`
|
|
87
168
|
```json
|
|
88
169
|
{
|
|
89
170
|
"mcpServers": {
|
|
@@ -94,7 +175,23 @@ codex mcp add atlassian --url http://localhost:47001/mcp/atlassian
|
|
|
94
175
|
}
|
|
95
176
|
```
|
|
96
177
|
|
|
97
|
-
**
|
|
178
|
+
**stdio** — `~/.codeium/windsurf/mcp_config.json`
|
|
179
|
+
```json
|
|
180
|
+
{
|
|
181
|
+
"mcpServers": {
|
|
182
|
+
"atlassian": {
|
|
183
|
+
"command": "localmcp",
|
|
184
|
+
"args": ["stdio", "atlassian"]
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
### Antigravity
|
|
193
|
+
|
|
194
|
+
**HTTP** — `~/.gemini/config/mcp_config.json`
|
|
98
195
|
```json
|
|
99
196
|
{
|
|
100
197
|
"mcpServers": {
|
|
@@ -105,6 +202,48 @@ codex mcp add atlassian --url http://localhost:47001/mcp/atlassian
|
|
|
105
202
|
}
|
|
106
203
|
```
|
|
107
204
|
|
|
205
|
+
**stdio** — `~/.gemini/config/mcp_config.json`
|
|
206
|
+
```json
|
|
207
|
+
{
|
|
208
|
+
"mcpServers": {
|
|
209
|
+
"atlassian": {
|
|
210
|
+
"command": "localmcp",
|
|
211
|
+
"args": ["stdio", "atlassian"]
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## REST API
|
|
220
|
+
|
|
221
|
+
Call any Atlassian tool over plain HTTP — useful for scripts and automation.
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
# List all tools
|
|
225
|
+
GET http://localhost:47001/api/atlassian
|
|
226
|
+
|
|
227
|
+
# Call a tool
|
|
228
|
+
POST http://localhost:47001/api/atlassian/getJiraIssue
|
|
229
|
+
Content-Type: application/json
|
|
230
|
+
|
|
231
|
+
{"issueIdOrKey": "PROJ-123"}
|
|
232
|
+
|
|
233
|
+
POST http://localhost:47001/api/atlassian/searchJiraIssuesUsingJql
|
|
234
|
+
Content-Type: application/json
|
|
235
|
+
|
|
236
|
+
{"jql": "project = PROJ AND status = \"In Progress\"", "maxResults": 20}
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
Open the interactive playground:
|
|
240
|
+
```bash
|
|
241
|
+
localmcp playground
|
|
242
|
+
# or: open http://localhost:47001/playground
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
108
247
|
## Tools
|
|
109
248
|
|
|
110
249
|
### Jira
|
package/docs/figma.md
CHANGED
|
@@ -31,34 +31,82 @@ http://localhost:47001/mcp/figma
|
|
|
31
31
|
|
|
32
32
|
## Register with AI Agents
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
Each agent supports two transports — pick whichever fits your setup:
|
|
35
|
+
|
|
36
|
+
- **HTTP** — requires the server to be running (`localmcp`). Shared across agents.
|
|
37
|
+
- **stdio** — the agent spawns the process on demand. No running server needed.
|
|
38
|
+
|
|
39
|
+
Or use `localmcp register` to set up automatically.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
### Claude Code
|
|
44
|
+
|
|
45
|
+
**HTTP** — `.claude/settings.local.json`
|
|
35
46
|
```json
|
|
36
47
|
{
|
|
37
48
|
"mcpServers": {
|
|
38
49
|
"figma": {
|
|
50
|
+
"type": "http",
|
|
39
51
|
"url": "http://localhost:47001/mcp/figma"
|
|
40
52
|
}
|
|
41
53
|
}
|
|
42
54
|
}
|
|
43
55
|
```
|
|
44
56
|
|
|
57
|
+
**stdio** — `.claude/settings.local.json`
|
|
58
|
+
```json
|
|
59
|
+
{
|
|
60
|
+
"mcpServers": {
|
|
61
|
+
"figma": {
|
|
62
|
+
"type": "stdio",
|
|
63
|
+
"command": "localmcp",
|
|
64
|
+
"args": ["stdio", "figma"]
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
45
70
|
Or register from the command line:
|
|
46
71
|
```bash
|
|
72
|
+
# HTTP
|
|
47
73
|
claude mcp add --transport http figma http://localhost:47001/mcp/figma
|
|
74
|
+
|
|
75
|
+
# stdio
|
|
76
|
+
claude mcp add figma localmcp stdio figma
|
|
48
77
|
```
|
|
49
78
|
|
|
50
|
-
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
### Codex
|
|
82
|
+
|
|
83
|
+
**HTTP** — `~/.codex/config.toml`
|
|
51
84
|
```toml
|
|
52
85
|
[mcp_servers.figma]
|
|
53
86
|
url = "http://localhost:47001/mcp/figma"
|
|
54
87
|
```
|
|
55
88
|
|
|
89
|
+
**stdio** — `~/.codex/config.toml`
|
|
90
|
+
```toml
|
|
91
|
+
[mcp_servers.figma]
|
|
92
|
+
command = "localmcp"
|
|
93
|
+
args = ["stdio", "figma"]
|
|
94
|
+
```
|
|
95
|
+
|
|
56
96
|
Or register from the command line:
|
|
57
97
|
```bash
|
|
98
|
+
# HTTP
|
|
58
99
|
codex mcp add figma --url http://localhost:47001/mcp/figma
|
|
100
|
+
|
|
101
|
+
# stdio
|
|
102
|
+
codex mcp add figma localmcp stdio figma
|
|
59
103
|
```
|
|
60
104
|
|
|
61
|
-
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
### GitHub Copilot / VS Code
|
|
108
|
+
|
|
109
|
+
**HTTP** — `.vscode/mcp.json`
|
|
62
110
|
```json
|
|
63
111
|
{
|
|
64
112
|
"servers": {
|
|
@@ -70,7 +118,24 @@ codex mcp add figma --url http://localhost:47001/mcp/figma
|
|
|
70
118
|
}
|
|
71
119
|
```
|
|
72
120
|
|
|
73
|
-
**
|
|
121
|
+
**stdio** — `.vscode/mcp.json`
|
|
122
|
+
```json
|
|
123
|
+
{
|
|
124
|
+
"servers": {
|
|
125
|
+
"figma": {
|
|
126
|
+
"type": "stdio",
|
|
127
|
+
"command": "localmcp",
|
|
128
|
+
"args": ["stdio", "figma"]
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
### Cursor
|
|
137
|
+
|
|
138
|
+
**HTTP** — `.cursor/mcp.json`
|
|
74
139
|
```json
|
|
75
140
|
{
|
|
76
141
|
"mcpServers": {
|
|
@@ -81,7 +146,23 @@ codex mcp add figma --url http://localhost:47001/mcp/figma
|
|
|
81
146
|
}
|
|
82
147
|
```
|
|
83
148
|
|
|
84
|
-
**
|
|
149
|
+
**stdio** — `.cursor/mcp.json`
|
|
150
|
+
```json
|
|
151
|
+
{
|
|
152
|
+
"mcpServers": {
|
|
153
|
+
"figma": {
|
|
154
|
+
"command": "localmcp",
|
|
155
|
+
"args": ["stdio", "figma"]
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
### Windsurf
|
|
164
|
+
|
|
165
|
+
**HTTP** — `~/.codeium/windsurf/mcp_config.json`
|
|
85
166
|
```json
|
|
86
167
|
{
|
|
87
168
|
"mcpServers": {
|
|
@@ -92,7 +173,23 @@ codex mcp add figma --url http://localhost:47001/mcp/figma
|
|
|
92
173
|
}
|
|
93
174
|
```
|
|
94
175
|
|
|
95
|
-
**
|
|
176
|
+
**stdio** — `~/.codeium/windsurf/mcp_config.json`
|
|
177
|
+
```json
|
|
178
|
+
{
|
|
179
|
+
"mcpServers": {
|
|
180
|
+
"figma": {
|
|
181
|
+
"command": "localmcp",
|
|
182
|
+
"args": ["stdio", "figma"]
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
### Antigravity
|
|
191
|
+
|
|
192
|
+
**HTTP** — `~/.gemini/config/mcp_config.json`
|
|
96
193
|
```json
|
|
97
194
|
{
|
|
98
195
|
"mcpServers": {
|
|
@@ -103,6 +200,48 @@ codex mcp add figma --url http://localhost:47001/mcp/figma
|
|
|
103
200
|
}
|
|
104
201
|
```
|
|
105
202
|
|
|
203
|
+
**stdio** — `~/.gemini/config/mcp_config.json`
|
|
204
|
+
```json
|
|
205
|
+
{
|
|
206
|
+
"mcpServers": {
|
|
207
|
+
"figma": {
|
|
208
|
+
"command": "localmcp",
|
|
209
|
+
"args": ["stdio", "figma"]
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## REST API
|
|
218
|
+
|
|
219
|
+
Call any Figma tool over plain HTTP — useful for scripts and automation.
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
# List all tools
|
|
223
|
+
GET http://localhost:47001/api/figma
|
|
224
|
+
|
|
225
|
+
# Call a tool
|
|
226
|
+
POST http://localhost:47001/api/figma/figma_whoami
|
|
227
|
+
Content-Type: application/json
|
|
228
|
+
|
|
229
|
+
{}
|
|
230
|
+
|
|
231
|
+
POST http://localhost:47001/api/figma/figma_get_metadata
|
|
232
|
+
Content-Type: application/json
|
|
233
|
+
|
|
234
|
+
{"fileKey": "AbCdEfGh", "depth": 2}
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
Open the interactive playground:
|
|
238
|
+
```bash
|
|
239
|
+
localmcp playground
|
|
240
|
+
# or: open http://localhost:47001/playground
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
106
245
|
## Tools
|
|
107
246
|
|
|
108
247
|
### File & Node
|