@thenavidm/midjourney-mcp-cli 1.0.0
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/LICENSE +21 -0
- package/README.md +677 -0
- package/SKILL.md +184 -0
- package/dist/api/client.d.ts +72 -0
- package/dist/api/client.js +278 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/download.d.ts +41 -0
- package/dist/api/download.js +108 -0
- package/dist/api/download.js.map +1 -0
- package/dist/api/errors.d.ts +75 -0
- package/dist/api/errors.js +166 -0
- package/dist/api/errors.js.map +1 -0
- package/dist/api/jobs.d.ts +140 -0
- package/dist/api/jobs.js +296 -0
- package/dist/api/jobs.js.map +1 -0
- package/dist/api/moodboards.d.ts +88 -0
- package/dist/api/moodboards.js +189 -0
- package/dist/api/moodboards.js.map +1 -0
- package/dist/capture.d.ts +27 -0
- package/dist/capture.js +162 -0
- package/dist/capture.js.map +1 -0
- package/dist/cli.d.ts +92 -0
- package/dist/cli.js +633 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +37 -0
- package/dist/config.js +90 -0
- package/dist/config.js.map +1 -0
- package/dist/content/prompt.d.ts +69 -0
- package/dist/content/prompt.js +173 -0
- package/dist/content/prompt.js.map +1 -0
- package/dist/doctor.d.ts +19 -0
- package/dist/doctor.js +161 -0
- package/dist/doctor.js.map +1 -0
- package/dist/format/jobs.d.ts +71 -0
- package/dist/format/jobs.js +211 -0
- package/dist/format/jobs.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +161 -0
- package/dist/index.js.map +1 -0
- package/dist/safety.d.ts +52 -0
- package/dist/safety.js +100 -0
- package/dist/safety.js.map +1 -0
- package/dist/server.d.ts +10 -0
- package/dist/server.js +57 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/create.d.ts +96 -0
- package/dist/tools/create.js +375 -0
- package/dist/tools/create.js.map +1 -0
- package/dist/tools/download.d.ts +17 -0
- package/dist/tools/download.js +47 -0
- package/dist/tools/download.js.map +1 -0
- package/dist/tools/explore.d.ts +8 -0
- package/dist/tools/explore.js +57 -0
- package/dist/tools/explore.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.js +16 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/jobs.d.ts +18 -0
- package/dist/tools/jobs.js +92 -0
- package/dist/tools/jobs.js.map +1 -0
- package/dist/tools/kit.d.ts +84 -0
- package/dist/tools/kit.js +104 -0
- package/dist/tools/kit.js.map +1 -0
- package/dist/tools/library.d.ts +22 -0
- package/dist/tools/library.js +185 -0
- package/dist/tools/library.js.map +1 -0
- package/dist/tools/profile.d.ts +2 -0
- package/dist/tools/profile.js +89 -0
- package/dist/tools/profile.js.map +1 -0
- package/dist/transport/cdp.d.ts +217 -0
- package/dist/transport/cdp.js +607 -0
- package/dist/transport/cdp.js.map +1 -0
- package/dist/transport/http.d.ts +18 -0
- package/dist/transport/http.js +48 -0
- package/dist/transport/http.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Streamable HTTP transport, for running this somewhere always on.
|
|
3
|
+
*
|
|
4
|
+
* Stdio is what an MCP client launches locally. This is for the other case: one
|
|
5
|
+
* machine that holds the browser session, reached by clients elsewhere. Bearer
|
|
6
|
+
* auth is mandatory when the listener is not on loopback, because this server
|
|
7
|
+
* acts as a signed-in Midjourney account and can spend money.
|
|
8
|
+
*/
|
|
9
|
+
import { createServer } from "node:http";
|
|
10
|
+
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
11
|
+
export function httpOptionsFromEnv(argv = []) {
|
|
12
|
+
const portFlag = argv.find((token) => token.startsWith("--port="));
|
|
13
|
+
const port = Number(portFlag?.slice("--port=".length) ?? process.env.MIDJOURNEY_HTTP_PORT ?? 8787);
|
|
14
|
+
return {
|
|
15
|
+
port: Number.isFinite(port) ? port : 8787,
|
|
16
|
+
host: process.env.MIDJOURNEY_HTTP_HOST ?? "127.0.0.1",
|
|
17
|
+
token: process.env.MIDJOURNEY_HTTP_TOKEN,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function isLoopback(host) {
|
|
21
|
+
return host === "127.0.0.1" || host === "::1" || host === "localhost";
|
|
22
|
+
}
|
|
23
|
+
export async function startHttpServer(built, options) {
|
|
24
|
+
if (!options.token && !isLoopback(options.host)) {
|
|
25
|
+
throw new Error(`Refusing to listen on ${options.host} without MIDJOURNEY_HTTP_TOKEN. This server acts as a signed-in Midjourney account and can spend money, so an unauthenticated public listener is not offered.`);
|
|
26
|
+
}
|
|
27
|
+
const transport = new StreamableHTTPServerTransport({ sessionIdGenerator: undefined });
|
|
28
|
+
await built.server.connect(transport);
|
|
29
|
+
const http = createServer((request, response) => {
|
|
30
|
+
if (options.token) {
|
|
31
|
+
const header = request.headers.authorization ?? "";
|
|
32
|
+
if (header !== `Bearer ${options.token}`) {
|
|
33
|
+
response.writeHead(401, { "content-type": "application/json" });
|
|
34
|
+
response.end(JSON.stringify({ error: "Unauthorized" }));
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
void transport.handleRequest(request, response);
|
|
39
|
+
});
|
|
40
|
+
await new Promise((resolve) => http.listen(options.port, options.host, resolve));
|
|
41
|
+
process.stderr.write(`[midjourney-mcp] listening on http://${options.host}:${options.port}\n`);
|
|
42
|
+
return {
|
|
43
|
+
close: () => new Promise((resolve) => {
|
|
44
|
+
http.close(() => resolve());
|
|
45
|
+
}),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAA6C,MAAM,WAAW,CAAC;AAEpF,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAMnG,MAAM,UAAU,kBAAkB,CAAC,OAAiB,EAAE;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,IAAI,CAAC,CAAC;IACnG,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;QACzC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,WAAW;QACrD,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB;KACzC,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,WAAW,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAAkB,EAClB,OAAoB;IAEpB,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CACb,yBAAyB,OAAO,CAAC,IAAI,+JAA+J,CACrM,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC,EAAE,kBAAkB,EAAE,SAAS,EAAE,CAAC,CAAC;IACvF,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEtC,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,OAAwB,EAAE,QAAwB,EAAE,EAAE;QAC/E,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC;YACnD,IAAI,MAAM,KAAK,UAAU,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;gBACzC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBAChE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;gBACxD,OAAO;YACT,CAAC;QACH,CAAC;QACD,KAAK,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACvF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;IAE/F,OAAO;QACL,KAAK,EAAE,GAAG,EAAE,CACV,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAC5B,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC;KACL,CAAC;AACJ,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@thenavidm/midjourney-mcp-cli",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Midjourney MCP server and CLI for Claude Code and AI agents. 27 tools for generating images, following jobs to completion, downloading the real files, and building moodboards that make a style reusable.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"midjourney-mcp": "dist/index.js",
|
|
9
|
+
"midjourney-cli": "dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"engines": {
|
|
12
|
+
"node": ">=22"
|
|
13
|
+
},
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "tsc",
|
|
16
|
+
"dev": "tsc --watch",
|
|
17
|
+
"start": "node dist/index.js",
|
|
18
|
+
"test": "vitest run",
|
|
19
|
+
"test:watch": "vitest",
|
|
20
|
+
"typecheck": "tsc --noEmit",
|
|
21
|
+
"prepublishOnly": "npm run build",
|
|
22
|
+
"build:mcpb": "bash desktop-extension/build.sh"
|
|
23
|
+
},
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"@modelcontextprotocol/sdk": "^1.18.0",
|
|
26
|
+
"zod": "^3.23.8"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@types/node": "^22.10.0",
|
|
30
|
+
"typescript": "^5.7.0",
|
|
31
|
+
"vitest": "^2.1.0"
|
|
32
|
+
},
|
|
33
|
+
"license": "MIT",
|
|
34
|
+
"author": "Navid Moazzez (https://navid.me)",
|
|
35
|
+
"homepage": "https://navid.me",
|
|
36
|
+
"repository": {
|
|
37
|
+
"type": "git",
|
|
38
|
+
"url": "git+https://github.com/navidmoazzez/midjourney-mcp-cli.git"
|
|
39
|
+
},
|
|
40
|
+
"bugs": {
|
|
41
|
+
"url": "https://github.com/navidmoazzez/midjourney-mcp-cli/issues"
|
|
42
|
+
},
|
|
43
|
+
"keywords": [
|
|
44
|
+
"ai-agents",
|
|
45
|
+
"anthropic",
|
|
46
|
+
"claude",
|
|
47
|
+
"claude-code",
|
|
48
|
+
"claude-desktop",
|
|
49
|
+
"cli",
|
|
50
|
+
"command-line-tool",
|
|
51
|
+
"cursor",
|
|
52
|
+
"image-generation",
|
|
53
|
+
"llm-tools",
|
|
54
|
+
"mcp",
|
|
55
|
+
"mcp-server",
|
|
56
|
+
"midjourney",
|
|
57
|
+
"midjourney-api",
|
|
58
|
+
"model-context-protocol",
|
|
59
|
+
"text-to-image",
|
|
60
|
+
"typescript",
|
|
61
|
+
"windsurf"
|
|
62
|
+
],
|
|
63
|
+
"files": [
|
|
64
|
+
"dist",
|
|
65
|
+
"README.md",
|
|
66
|
+
"SKILL.md",
|
|
67
|
+
"LICENSE"
|
|
68
|
+
],
|
|
69
|
+
"contributors": [
|
|
70
|
+
"Navid Moazzez (https://navid.me)"
|
|
71
|
+
]
|
|
72
|
+
}
|