mcpize 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.
Files changed (75) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +140 -0
  3. package/dist/commands/deploy.d.ts +8 -0
  4. package/dist/commands/deploy.d.ts.map +1 -0
  5. package/dist/commands/deploy.js +337 -0
  6. package/dist/commands/deploy.js.map +1 -0
  7. package/dist/commands/doctor.d.ts +7 -0
  8. package/dist/commands/doctor.d.ts.map +1 -0
  9. package/dist/commands/doctor.js +257 -0
  10. package/dist/commands/doctor.js.map +1 -0
  11. package/dist/commands/init.d.ts +9 -0
  12. package/dist/commands/init.d.ts.map +1 -0
  13. package/dist/commands/init.js +238 -0
  14. package/dist/commands/init.js.map +1 -0
  15. package/dist/commands/link.d.ts +6 -0
  16. package/dist/commands/link.d.ts.map +1 -0
  17. package/dist/commands/link.js +147 -0
  18. package/dist/commands/link.js.map +1 -0
  19. package/dist/commands/login.d.ts +2 -0
  20. package/dist/commands/login.d.ts.map +1 -0
  21. package/dist/commands/login.js +88 -0
  22. package/dist/commands/login.js.map +1 -0
  23. package/dist/commands/logout.d.ts +2 -0
  24. package/dist/commands/logout.d.ts.map +1 -0
  25. package/dist/commands/logout.js +9 -0
  26. package/dist/commands/logout.js.map +1 -0
  27. package/dist/commands/logs.d.ts +13 -0
  28. package/dist/commands/logs.d.ts.map +1 -0
  29. package/dist/commands/logs.js +173 -0
  30. package/dist/commands/logs.js.map +1 -0
  31. package/dist/commands/secrets.d.ts +16 -0
  32. package/dist/commands/secrets.d.ts.map +1 -0
  33. package/dist/commands/secrets.js +195 -0
  34. package/dist/commands/secrets.js.map +1 -0
  35. package/dist/commands/status.d.ts +7 -0
  36. package/dist/commands/status.d.ts.map +1 -0
  37. package/dist/commands/status.js +187 -0
  38. package/dist/commands/status.js.map +1 -0
  39. package/dist/index.d.ts +3 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +241 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/lib/api.d.ts +154 -0
  44. package/dist/lib/api.d.ts.map +1 -0
  45. package/dist/lib/api.js +364 -0
  46. package/dist/lib/api.js.map +1 -0
  47. package/dist/lib/auth.d.ts +20 -0
  48. package/dist/lib/auth.d.ts.map +1 -0
  49. package/dist/lib/auth.js +106 -0
  50. package/dist/lib/auth.js.map +1 -0
  51. package/dist/lib/cache.d.ts +39 -0
  52. package/dist/lib/cache.d.ts.map +1 -0
  53. package/dist/lib/cache.js +112 -0
  54. package/dist/lib/cache.js.map +1 -0
  55. package/dist/lib/config.d.ts +21 -0
  56. package/dist/lib/config.d.ts.map +1 -0
  57. package/dist/lib/config.js +90 -0
  58. package/dist/lib/config.js.map +1 -0
  59. package/dist/lib/degit.d.ts +25 -0
  60. package/dist/lib/degit.d.ts.map +1 -0
  61. package/dist/lib/degit.js +187 -0
  62. package/dist/lib/degit.js.map +1 -0
  63. package/dist/lib/git.d.ts +10 -0
  64. package/dist/lib/git.d.ts.map +1 -0
  65. package/dist/lib/git.js +43 -0
  66. package/dist/lib/git.js.map +1 -0
  67. package/dist/lib/project.d.ts +38 -0
  68. package/dist/lib/project.d.ts.map +1 -0
  69. package/dist/lib/project.js +72 -0
  70. package/dist/lib/project.js.map +1 -0
  71. package/dist/lib/tarball.d.ts +7 -0
  72. package/dist/lib/tarball.d.ts.map +1 -0
  73. package/dist/lib/tarball.js +130 -0
  74. package/dist/lib/tarball.js.map +1 -0
  75. package/package.json +56 -0
@@ -0,0 +1,43 @@
1
+ import { exec } from "node:child_process";
2
+ import { promisify } from "node:util";
3
+ const execAsync = promisify(exec);
4
+ async function execGit(command, cwd) {
5
+ try {
6
+ const { stdout } = await execAsync(command, { cwd });
7
+ return stdout.trim();
8
+ }
9
+ catch {
10
+ return "";
11
+ }
12
+ }
13
+ export async function getGitInfo(cwd) {
14
+ const sha = await execGit("git rev-parse HEAD", cwd);
15
+ if (!sha) {
16
+ return null; // Not a git repo
17
+ }
18
+ const branch = await execGit("git rev-parse --abbrev-ref HEAD", cwd);
19
+ const author = await execGit('git log -1 --format="%an"', cwd);
20
+ const message = await execGit('git log -1 --format="%s"', cwd);
21
+ // Try to get GitHub repo info
22
+ const remote = await execGit("git remote get-url origin", cwd);
23
+ let repoFullName;
24
+ if (remote) {
25
+ // Match: https://github.com/user/repo.git or git@github.com:user/repo.git
26
+ const match = remote.match(/github\.com[:/](.+?)\/(.+?)(\.git)?$/);
27
+ if (match) {
28
+ repoFullName = `${match[1]}/${match[2].replace(".git", "")}`;
29
+ }
30
+ }
31
+ return {
32
+ sha: sha.slice(0, 7), // Short SHA
33
+ branch,
34
+ author,
35
+ message,
36
+ repoFullName,
37
+ };
38
+ }
39
+ export async function isGitRepo(cwd) {
40
+ const result = await execGit("git rev-parse --is-inside-work-tree", cwd);
41
+ return result === "true";
42
+ }
43
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/lib/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAUlC,KAAK,UAAU,OAAO,CAAC,OAAe,EAAE,GAAW;IACjD,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACrD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW;IAC1C,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;IAErD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAC,CAAC,iBAAiB;IAChC,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;IAE/D,8BAA8B;IAC9B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC;IAC/D,IAAI,YAAgC,CAAC;IAErC,IAAI,MAAM,EAAE,CAAC;QACX,0EAA0E;QAC1E,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACnE,IAAI,KAAK,EAAE,CAAC;YACV,YAAY,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,OAAO;QACL,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY;QAClC,MAAM;QACN,MAAM;QACN,OAAO;QACP,YAAY;KACb,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW;IACzC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,qCAAqC,EAAE,GAAG,CAAC,CAAC;IACzE,OAAO,MAAM,KAAK,MAAM,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,38 @@
1
+ export interface ProjectConfig {
2
+ serverId: string;
3
+ serverName?: string;
4
+ branch?: string;
5
+ }
6
+ export interface McpizeManifest {
7
+ version: number;
8
+ name?: string;
9
+ description?: string;
10
+ runtime: "typescript" | "python" | "php";
11
+ entry?: string;
12
+ build?: {
13
+ install?: string;
14
+ command?: string;
15
+ };
16
+ startCommand?: {
17
+ type: "http" | "stdio";
18
+ command: string;
19
+ };
20
+ configSchema?: {
21
+ source: "code" | "inline";
22
+ };
23
+ }
24
+ export declare function getProjectConfigPath(cwd: string): string;
25
+ export declare function loadProjectConfig(cwd: string): ProjectConfig | null;
26
+ export declare function saveProjectConfig(cwd: string, config: ProjectConfig): void;
27
+ export declare function loadManifest(cwd: string): McpizeManifest | null;
28
+ export declare function hasManifest(cwd: string): boolean;
29
+ export declare function detectRuntime(cwd: string): "typescript" | "python" | "php" | null;
30
+ export interface PackageJson {
31
+ name?: string;
32
+ description?: string;
33
+ version?: string;
34
+ main?: string;
35
+ exports?: unknown;
36
+ }
37
+ export declare function loadPackageJson(cwd: string): PackageJson | null;
38
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/lib/project.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,YAAY,GAAG,QAAQ,GAAG,KAAK,CAAC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE;QACN,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,YAAY,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QACvB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,YAAY,CAAC,EAAE;QACb,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;KAC3B,CAAC;CACH;AAKD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAanE;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAS1E;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAa/D;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,GACV,YAAY,GAAG,QAAQ,GAAG,KAAK,GAAG,IAAI,CAcxC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAa/D"}
@@ -0,0 +1,72 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { parse as parseYaml } from "yaml";
4
+ const PROJECT_DIR = ".mcpize";
5
+ const PROJECT_FILE = "project.json";
6
+ export function getProjectConfigPath(cwd) {
7
+ return join(cwd, PROJECT_DIR, PROJECT_FILE);
8
+ }
9
+ export function loadProjectConfig(cwd) {
10
+ const configPath = getProjectConfigPath(cwd);
11
+ if (!existsSync(configPath)) {
12
+ return null;
13
+ }
14
+ try {
15
+ const content = readFileSync(configPath, "utf-8");
16
+ return JSON.parse(content);
17
+ }
18
+ catch {
19
+ return null;
20
+ }
21
+ }
22
+ export function saveProjectConfig(cwd, config) {
23
+ const projectDir = join(cwd, PROJECT_DIR);
24
+ if (!existsSync(projectDir)) {
25
+ mkdirSync(projectDir, { recursive: true });
26
+ }
27
+ const configPath = getProjectConfigPath(cwd);
28
+ writeFileSync(configPath, JSON.stringify(config, null, 2));
29
+ }
30
+ export function loadManifest(cwd) {
31
+ const manifestPath = join(cwd, "mcpize.yaml");
32
+ if (!existsSync(manifestPath)) {
33
+ return null;
34
+ }
35
+ try {
36
+ const content = readFileSync(manifestPath, "utf-8");
37
+ return parseYaml(content);
38
+ }
39
+ catch {
40
+ return null;
41
+ }
42
+ }
43
+ export function hasManifest(cwd) {
44
+ return existsSync(join(cwd, "mcpize.yaml"));
45
+ }
46
+ export function detectRuntime(cwd) {
47
+ if (existsSync(join(cwd, "package.json"))) {
48
+ return "typescript";
49
+ }
50
+ if (existsSync(join(cwd, "requirements.txt")) ||
51
+ existsSync(join(cwd, "pyproject.toml"))) {
52
+ return "python";
53
+ }
54
+ if (existsSync(join(cwd, "composer.json"))) {
55
+ return "php";
56
+ }
57
+ return null;
58
+ }
59
+ export function loadPackageJson(cwd) {
60
+ const packagePath = join(cwd, "package.json");
61
+ if (!existsSync(packagePath)) {
62
+ return null;
63
+ }
64
+ try {
65
+ const content = readFileSync(packagePath, "utf-8");
66
+ return JSON.parse(content);
67
+ }
68
+ catch {
69
+ return null;
70
+ }
71
+ }
72
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/lib/project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export interface TarballOptions {
2
+ cwd: string;
3
+ excludes?: string[];
4
+ }
5
+ export declare function createTarball(options: TarballOptions): Promise<Buffer>;
6
+ export declare function formatBytes(bytes: number): string;
7
+ //# sourceMappingURL=tarball.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tarball.d.ts","sourceRoot":"","sources":["../../src/lib/tarball.ts"],"names":[],"mappings":"AAwCA,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AA+ED,wBAAsB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAmC5E;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMjD"}
@@ -0,0 +1,130 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { join, relative } from "node:path";
3
+ import * as tar from "tar";
4
+ // Default patterns to exclude from tarball
5
+ const DEFAULT_EXCLUDES = [
6
+ // Package directories
7
+ "node_modules",
8
+ "__pycache__",
9
+ "vendor",
10
+ ".venv",
11
+ "venv",
12
+ // Build artifacts
13
+ "dist",
14
+ "build",
15
+ ".next",
16
+ ".nuxt",
17
+ // Git and IDE
18
+ ".git",
19
+ ".mcpize",
20
+ ".vscode",
21
+ ".idea",
22
+ ".DS_Store",
23
+ // Environment files
24
+ ".env",
25
+ ".env.*",
26
+ "!.env.example",
27
+ // Test and coverage
28
+ "coverage",
29
+ ".nyc_output",
30
+ // Logs
31
+ "*.log",
32
+ "npm-debug.log*",
33
+ ];
34
+ function loadMcpizeIgnore(cwd) {
35
+ const ignorePath = join(cwd, ".mcpizeignore");
36
+ if (!existsSync(ignorePath)) {
37
+ return [];
38
+ }
39
+ const content = readFileSync(ignorePath, "utf-8");
40
+ return content
41
+ .split("\n")
42
+ .map((line) => line.trim())
43
+ .filter((line) => line && !line.startsWith("#"));
44
+ }
45
+ function shouldExclude(filePath, excludes) {
46
+ const fileName = filePath.split("/").pop() || "";
47
+ for (const pattern of excludes) {
48
+ // Skip negation patterns in this check
49
+ if (pattern.startsWith("!"))
50
+ continue;
51
+ // Exact match
52
+ if (filePath === pattern || fileName === pattern) {
53
+ return true;
54
+ }
55
+ // Directory match (pattern without trailing slash matches directory)
56
+ if (filePath.startsWith(pattern + "/")) {
57
+ return true;
58
+ }
59
+ // Simple glob match for *.ext patterns
60
+ if (pattern.startsWith("*.")) {
61
+ const ext = pattern.slice(1);
62
+ if (fileName.endsWith(ext)) {
63
+ return true;
64
+ }
65
+ }
66
+ // Check if any path segment matches
67
+ const segments = filePath.split("/");
68
+ if (segments.includes(pattern)) {
69
+ return true;
70
+ }
71
+ }
72
+ return false;
73
+ }
74
+ async function collectFiles(dir, baseDir, excludes) {
75
+ const { readdir } = await import("node:fs/promises");
76
+ const files = [];
77
+ const entries = await readdir(dir, { withFileTypes: true });
78
+ for (const entry of entries) {
79
+ const fullPath = join(dir, entry.name);
80
+ const relativePath = relative(baseDir, fullPath);
81
+ if (shouldExclude(relativePath, excludes)) {
82
+ continue;
83
+ }
84
+ if (entry.isDirectory()) {
85
+ const subFiles = await collectFiles(fullPath, baseDir, excludes);
86
+ files.push(...subFiles);
87
+ }
88
+ else if (entry.isFile()) {
89
+ files.push(relativePath);
90
+ }
91
+ }
92
+ return files;
93
+ }
94
+ export async function createTarball(options) {
95
+ const { cwd } = options;
96
+ // Combine default excludes with .mcpizeignore
97
+ const customExcludes = loadMcpizeIgnore(cwd);
98
+ const allExcludes = [
99
+ ...DEFAULT_EXCLUDES,
100
+ ...(options.excludes || []),
101
+ ...customExcludes,
102
+ ];
103
+ // Collect all files to include
104
+ const files = await collectFiles(cwd, cwd, allExcludes);
105
+ if (files.length === 0) {
106
+ throw new Error("No files to include in tarball");
107
+ }
108
+ // Create tarball using promise-based approach
109
+ return new Promise((resolve, reject) => {
110
+ const chunks = [];
111
+ tar
112
+ .create({
113
+ gzip: true,
114
+ cwd,
115
+ portable: true,
116
+ }, files)
117
+ .on("data", (chunk) => chunks.push(chunk))
118
+ .on("end", () => resolve(Buffer.concat(chunks)))
119
+ .on("error", reject);
120
+ });
121
+ }
122
+ export function formatBytes(bytes) {
123
+ if (bytes === 0)
124
+ return "0 B";
125
+ const k = 1024;
126
+ const sizes = ["B", "KB", "MB", "GB"];
127
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
128
+ return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;
129
+ }
130
+ //# sourceMappingURL=tarball.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tarball.js","sourceRoot":"","sources":["../../src/lib/tarball.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "mcpize",
3
+ "version": "1.0.0",
4
+ "description": "Deploy and monetize MCP servers in the cloud",
5
+ "type": "module",
6
+ "bin": {
7
+ "mcpize": "./dist/index.js"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "dev": "tsx watch src/index.ts",
12
+ "start": "node dist/index.js",
13
+ "lint": "eslint src/",
14
+ "typecheck": "tsc --noEmit"
15
+ },
16
+ "dependencies": {
17
+ "chalk": "^5.6.0",
18
+ "commander": "^14.0.0",
19
+ "dotenv": "^17.2.3",
20
+ "enquirer": "^2.4.1",
21
+ "open": "^11.0.0",
22
+ "ora": "^9.0.0",
23
+ "tar": "^7.5.0",
24
+ "yaml": "^2.8.0"
25
+ },
26
+ "devDependencies": {
27
+ "@types/node": "^22.15.21",
28
+ "@types/tar": "^6.1.13",
29
+ "tsx": "^4.19.4",
30
+ "typescript": "^5.8.3"
31
+ },
32
+ "engines": {
33
+ "node": ">=20.0.0"
34
+ },
35
+ "files": [
36
+ "dist"
37
+ ],
38
+ "keywords": [
39
+ "mcp",
40
+ "model-context-protocol",
41
+ "cli",
42
+ "deploy",
43
+ "serverless",
44
+ "mcpize"
45
+ ],
46
+ "license": "MIT",
47
+ "author": "MCPize",
48
+ "homepage": "https://mcpize.com",
49
+ "repository": {
50
+ "type": "git",
51
+ "url": "https://github.com/mcpize/cli.git"
52
+ },
53
+ "bugs": {
54
+ "url": "https://github.com/mcpize/cli/issues"
55
+ }
56
+ }