@ratio-mcp/setup 1.2.1 → 1.4.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/dist/index.js +0 -0
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +29 -42
- package/dist/setup.js.map +1 -1
- package/package.json +8 -7
package/dist/index.js
CHANGED
|
File without changes
|
package/dist/setup.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AA+JA,wBAAgB,GAAG,IAAI,IAAI,CAiC1B"}
|
package/dist/setup.js
CHANGED
|
@@ -29,25 +29,25 @@ function buildEnvPath(npxFullPath) {
|
|
|
29
29
|
function getMcpServerEntries() {
|
|
30
30
|
const npxPath = resolveNpxPath();
|
|
31
31
|
const isAbsolute = path.isAbsolute(npxPath);
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
args: ['-y', `${pkg}@latest`],
|
|
36
|
-
};
|
|
37
|
-
if (isAbsolute) {
|
|
38
|
-
entry.env = { PATH: buildEnvPath(npxPath) };
|
|
39
|
-
}
|
|
40
|
-
return entry;
|
|
32
|
+
const entry = {
|
|
33
|
+
command: npxPath,
|
|
34
|
+
args: ['-y', '@ratio-mcp/dev-server@latest'],
|
|
41
35
|
};
|
|
36
|
+
// Only add env.PATH when we have an absolute npx path (needed for Claude Desktop)
|
|
37
|
+
if (isAbsolute) {
|
|
38
|
+
entry.env = { PATH: buildEnvPath(npxPath) };
|
|
39
|
+
}
|
|
42
40
|
return {
|
|
43
|
-
'ratio-
|
|
44
|
-
'ratio-mcp-doc': makeEntry('@ratio-mcp/docs-server'),
|
|
41
|
+
'ratio-dev': entry,
|
|
45
42
|
};
|
|
46
43
|
}
|
|
47
|
-
function
|
|
44
|
+
function getConfigPaths() {
|
|
48
45
|
const home = os.homedir();
|
|
49
46
|
const platform = process.platform;
|
|
50
|
-
const paths = [
|
|
47
|
+
const paths = [
|
|
48
|
+
// Claude Code (all platforms)
|
|
49
|
+
path.join(home, '.claude', 'claude_desktop_config.json'),
|
|
50
|
+
];
|
|
51
51
|
// Claude Desktop (platform-specific)
|
|
52
52
|
if (platform === 'darwin') {
|
|
53
53
|
paths.push(path.join(home, 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json'));
|
|
@@ -62,13 +62,6 @@ function getDesktopConfigPaths() {
|
|
|
62
62
|
}
|
|
63
63
|
return paths;
|
|
64
64
|
}
|
|
65
|
-
/**
|
|
66
|
-
* Get the Claude Code CLI config path (~/.claude.json).
|
|
67
|
-
* This is a separate file from Desktop — CLI doesn't read Desktop's config.
|
|
68
|
-
*/
|
|
69
|
-
function getCliConfigPath() {
|
|
70
|
-
return path.join(os.homedir(), '.claude.json');
|
|
71
|
-
}
|
|
72
65
|
function backupFile(filePath) {
|
|
73
66
|
const backupPath = filePath + '.bak';
|
|
74
67
|
fs.copyFileSync(filePath, backupPath);
|
|
@@ -81,6 +74,7 @@ function atomicWrite(filePath, content) {
|
|
|
81
74
|
}
|
|
82
75
|
function updateConfig(filePath) {
|
|
83
76
|
console.log(`\nFound config: ${filePath}`);
|
|
77
|
+
// Read existing file
|
|
84
78
|
let raw;
|
|
85
79
|
try {
|
|
86
80
|
raw = fs.readFileSync(filePath, 'utf-8');
|
|
@@ -89,6 +83,7 @@ function updateConfig(filePath) {
|
|
|
89
83
|
console.error(` Error: Could not read file. Skipping.`);
|
|
90
84
|
return false;
|
|
91
85
|
}
|
|
86
|
+
// Validate JSON
|
|
92
87
|
let config;
|
|
93
88
|
try {
|
|
94
89
|
config = JSON.parse(raw);
|
|
@@ -98,11 +93,14 @@ function updateConfig(filePath) {
|
|
|
98
93
|
console.error(` Fix the JSON manually or restore from a backup.`);
|
|
99
94
|
return false;
|
|
100
95
|
}
|
|
96
|
+
// Validate config is an object
|
|
101
97
|
if (typeof config !== 'object' || config === null || Array.isArray(config)) {
|
|
102
98
|
console.error(` Error: Config is not a JSON object. Skipping.`);
|
|
103
99
|
return false;
|
|
104
100
|
}
|
|
101
|
+
// Backup before modifying
|
|
105
102
|
backupFile(filePath);
|
|
103
|
+
// Ensure mcpServers exists and is an object
|
|
106
104
|
if (!('mcpServers' in config)) {
|
|
107
105
|
config.mcpServers = {};
|
|
108
106
|
}
|
|
@@ -117,60 +115,49 @@ function updateConfig(filePath) {
|
|
|
117
115
|
for (const [name, entry] of Object.entries(getMcpServerEntries())) {
|
|
118
116
|
servers[name] = entry;
|
|
119
117
|
}
|
|
118
|
+
// Atomic write
|
|
120
119
|
atomicWrite(filePath, JSON.stringify(config, null, 2) + '\n');
|
|
121
|
-
console.log(` Configured ratio-
|
|
120
|
+
console.log(` Configured ratio-dev server.`);
|
|
122
121
|
return true;
|
|
123
122
|
}
|
|
124
123
|
function createFreshConfig(filePath) {
|
|
125
124
|
console.log(`\nNo existing Claude config found.`);
|
|
126
125
|
console.log(`Creating new config at: ${filePath}`);
|
|
126
|
+
// Create directory if needed
|
|
127
127
|
const dir = path.dirname(filePath);
|
|
128
128
|
fs.mkdirSync(dir, { recursive: true });
|
|
129
129
|
const config = {
|
|
130
130
|
mcpServers: { ...getMcpServerEntries() },
|
|
131
131
|
};
|
|
132
132
|
atomicWrite(filePath, JSON.stringify(config, null, 2) + '\n');
|
|
133
|
-
console.log(` Configured ratio-
|
|
133
|
+
console.log(` Configured ratio-dev server.`);
|
|
134
134
|
return true;
|
|
135
135
|
}
|
|
136
136
|
export function run() {
|
|
137
137
|
console.log('');
|
|
138
138
|
console.log('Ratio MCP Server Setup');
|
|
139
139
|
console.log('======================');
|
|
140
|
+
const allPaths = getConfigPaths();
|
|
141
|
+
const existingPaths = allPaths.filter((p) => fs.existsSync(p));
|
|
140
142
|
let configured = 0;
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
if (existingDesktopPaths.length > 0) {
|
|
145
|
-
for (const configPath of existingDesktopPaths) {
|
|
143
|
+
if (existingPaths.length > 0) {
|
|
144
|
+
// Update all existing config files
|
|
145
|
+
for (const configPath of existingPaths) {
|
|
146
146
|
if (updateConfig(configPath)) {
|
|
147
147
|
configured++;
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
150
|
}
|
|
151
151
|
else {
|
|
152
|
-
//
|
|
153
|
-
const defaultPath =
|
|
152
|
+
// No config found — create Claude Code config as default
|
|
153
|
+
const defaultPath = allPaths[0]; // ~/.claude/claude_desktop_config.json
|
|
154
154
|
if (createFreshConfig(defaultPath)) {
|
|
155
155
|
configured++;
|
|
156
156
|
}
|
|
157
157
|
}
|
|
158
|
-
// 2. Configure Claude Code CLI (~/.claude.json)
|
|
159
|
-
const cliPath = getCliConfigPath();
|
|
160
|
-
if (fs.existsSync(cliPath)) {
|
|
161
|
-
if (updateConfig(cliPath)) {
|
|
162
|
-
configured++;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
if (createFreshConfig(cliPath)) {
|
|
167
|
-
configured++;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
158
|
console.log('');
|
|
171
159
|
if (configured > 0) {
|
|
172
160
|
console.log(`Done! ${configured} config file(s) updated.`);
|
|
173
|
-
console.log('Servers configured for both Claude Desktop and Claude Code CLI.');
|
|
174
161
|
console.log('Open Claude and start building!');
|
|
175
162
|
}
|
|
176
163
|
else {
|
package/dist/setup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C;;;;GAIG;AACH,SAAS,cAAc;IACrB,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC,CAAC,kEAAkE;IAClF,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CAAC,WAAmB;IACvC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,CAAC,gBAAgB,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC;IACnE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,mBAAmB;IAC1B,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAE5C,MAAM,
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ratio-mcp/setup",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "One-command setup for Ratio MCP servers in Claude",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"ratio-mcp-setup": "dist/index.js"
|
|
8
8
|
},
|
|
9
|
-
"files": [
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
"prepublishOnly": "pnpm build"
|
|
13
|
-
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist"
|
|
11
|
+
],
|
|
14
12
|
"devDependencies": {
|
|
15
13
|
"@types/node": "^20.0.0",
|
|
16
14
|
"typescript": "^5.4.0"
|
|
15
|
+
},
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "tsc"
|
|
17
18
|
}
|
|
18
|
-
}
|
|
19
|
+
}
|