@ratio-mcp/setup 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.
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import { run } from './setup.js';
3
+ run();
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEjC,GAAG,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function run(): void;
2
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AA8HA,wBAAgB,GAAG,IAAI,IAAI,CAiC1B"}
package/dist/setup.js ADDED
@@ -0,0 +1,138 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import os from 'node:os';
4
+ const MCP_SERVER_ENTRIES = {
5
+ 'ratio-docs': {
6
+ command: 'npx',
7
+ args: ['-y', '@ratio-mcp/docs-server@latest'],
8
+ },
9
+ 'ratio-dev': {
10
+ command: 'npx',
11
+ args: ['-y', '@ratio-mcp/dev-server@latest'],
12
+ },
13
+ };
14
+ function getConfigPaths() {
15
+ const home = os.homedir();
16
+ const platform = process.platform;
17
+ const paths = [
18
+ // Claude Code (all platforms)
19
+ path.join(home, '.claude', 'claude_desktop_config.json'),
20
+ ];
21
+ // Claude Desktop (platform-specific)
22
+ if (platform === 'darwin') {
23
+ paths.push(path.join(home, 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json'));
24
+ }
25
+ else if (platform === 'win32') {
26
+ const appData = process.env.APPDATA || path.join(home, 'AppData', 'Roaming');
27
+ paths.push(path.join(appData, 'Claude', 'claude_desktop_config.json'));
28
+ }
29
+ else {
30
+ // Linux
31
+ paths.push(path.join(home, '.config', 'Claude', 'claude_desktop_config.json'));
32
+ }
33
+ return paths;
34
+ }
35
+ function backupFile(filePath) {
36
+ const backupPath = filePath + '.bak';
37
+ fs.copyFileSync(filePath, backupPath);
38
+ console.log(` Backup saved to ${backupPath}`);
39
+ }
40
+ function atomicWrite(filePath, content) {
41
+ const tmpPath = filePath + '.tmp';
42
+ fs.writeFileSync(tmpPath, content, 'utf-8');
43
+ fs.renameSync(tmpPath, filePath);
44
+ }
45
+ function updateConfig(filePath) {
46
+ console.log(`\nFound config: ${filePath}`);
47
+ // Read existing file
48
+ let raw;
49
+ try {
50
+ raw = fs.readFileSync(filePath, 'utf-8');
51
+ }
52
+ catch {
53
+ console.error(` Error: Could not read file. Skipping.`);
54
+ return false;
55
+ }
56
+ // Validate JSON
57
+ let config;
58
+ try {
59
+ config = JSON.parse(raw);
60
+ }
61
+ catch {
62
+ console.error(` Error: Invalid JSON. Skipping this file.`);
63
+ console.error(` Fix the JSON manually or restore from a backup.`);
64
+ return false;
65
+ }
66
+ // Validate config is an object
67
+ if (typeof config !== 'object' || config === null || Array.isArray(config)) {
68
+ console.error(` Error: Config is not a JSON object. Skipping.`);
69
+ return false;
70
+ }
71
+ // Backup before modifying
72
+ backupFile(filePath);
73
+ // Ensure mcpServers exists and is an object
74
+ if (!('mcpServers' in config)) {
75
+ config.mcpServers = {};
76
+ }
77
+ else if (typeof config.mcpServers !== 'object' ||
78
+ config.mcpServers === null ||
79
+ Array.isArray(config.mcpServers)) {
80
+ console.error(` Warning: mcpServers is not an object. Replacing it.`);
81
+ config.mcpServers = {};
82
+ }
83
+ // Merge our server entries (preserves existing servers)
84
+ const servers = config.mcpServers;
85
+ for (const [name, entry] of Object.entries(MCP_SERVER_ENTRIES)) {
86
+ servers[name] = entry;
87
+ }
88
+ // Atomic write
89
+ atomicWrite(filePath, JSON.stringify(config, null, 2) + '\n');
90
+ console.log(` Configured ratio-docs and ratio-dev servers.`);
91
+ return true;
92
+ }
93
+ function createFreshConfig(filePath) {
94
+ console.log(`\nNo existing Claude config found.`);
95
+ console.log(`Creating new config at: ${filePath}`);
96
+ // Create directory if needed
97
+ const dir = path.dirname(filePath);
98
+ fs.mkdirSync(dir, { recursive: true });
99
+ const config = {
100
+ mcpServers: { ...MCP_SERVER_ENTRIES },
101
+ };
102
+ atomicWrite(filePath, JSON.stringify(config, null, 2) + '\n');
103
+ console.log(` Configured ratio-docs and ratio-dev servers.`);
104
+ return true;
105
+ }
106
+ export function run() {
107
+ console.log('');
108
+ console.log('Ratio MCP Server Setup');
109
+ console.log('======================');
110
+ const allPaths = getConfigPaths();
111
+ const existingPaths = allPaths.filter((p) => fs.existsSync(p));
112
+ let configured = 0;
113
+ if (existingPaths.length > 0) {
114
+ // Update all existing config files
115
+ for (const configPath of existingPaths) {
116
+ if (updateConfig(configPath)) {
117
+ configured++;
118
+ }
119
+ }
120
+ }
121
+ else {
122
+ // No config found — create Claude Code config as default
123
+ const defaultPath = allPaths[0]; // ~/.claude/claude_desktop_config.json
124
+ if (createFreshConfig(defaultPath)) {
125
+ configured++;
126
+ }
127
+ }
128
+ console.log('');
129
+ if (configured > 0) {
130
+ console.log(`Done! ${configured} config file(s) updated.`);
131
+ console.log('Open Claude and start building!');
132
+ }
133
+ else {
134
+ console.log('No config files were updated. Please check the errors above.');
135
+ }
136
+ console.log('');
137
+ }
138
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "@ratio-mcp/setup",
3
+ "version": "1.0.0",
4
+ "description": "One-command setup for Ratio MCP servers in Claude",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "ratio-mcp-setup": "dist/index.js"
9
+ },
10
+ "files": ["dist"],
11
+ "scripts": {
12
+ "build": "tsc",
13
+ "start": "node dist/index.js",
14
+ "typecheck": "tsc --noEmit",
15
+ "prepublishOnly": "pnpm build"
16
+ },
17
+ "devDependencies": {
18
+ "@types/node": "^20.0.0",
19
+ "typescript": "^5.4.0"
20
+ }
21
+ }