thetoolforthat 1.0.0 → 1.1.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 (4) hide show
  1. package/README.md +72 -6
  2. package/cli.js +186 -0
  3. package/package.json +6 -4
  4. package/server.js +0 -0
package/README.md CHANGED
@@ -6,25 +6,91 @@ Tools, resources, and people worth knowing. A curated collection for builders an
6
6
 
7
7
  ## MCP Server
8
8
 
9
- This repo includes an MCP server so AI coding agents can search and recommend tools. No cloning required - install via npm and updates sync automatically from this repo.
9
+ This repo includes an MCP server so AI coding agents can search and recommend tools. Updates sync automatically from this repo.
10
10
 
11
- ### Add to Claude Code
11
+ ### Quick Start
12
12
 
13
- Add to your `~/.claude/settings.json`:
13
+ Select your client and run the command:
14
+
15
+ <details open>
16
+ <summary><strong>Claude Code</strong></summary>
17
+
18
+ ```bash
19
+ npx thetoolforthat init --client claude
20
+ ```
21
+
22
+ Restart Claude Code and try:
23
+ - Search for animation libraries
24
+ - Recommend tools for building a SaaS dashboard
25
+ - List all design agencies
26
+
27
+ </details>
28
+
29
+ <details>
30
+ <summary><strong>Cursor</strong></summary>
31
+
32
+ ```bash
33
+ npx thetoolforthat init --client cursor
34
+ ```
35
+
36
+ Open Cursor Settings and enable the MCP server for thetoolforthat.
37
+
38
+ </details>
39
+
40
+ <details>
41
+ <summary><strong>VS Code</strong></summary>
42
+
43
+ ```bash
44
+ npx thetoolforthat init --client vscode
45
+ ```
46
+
47
+ Open `.vscode/mcp.json` and click Start next to thetoolforthat.
48
+
49
+ </details>
50
+
51
+ <details>
52
+ <summary><strong>Codex</strong></summary>
53
+
54
+ ```bash
55
+ npx thetoolforthat init --client codex
56
+ ```
57
+
58
+ Then add to `~/.codex/config.toml`:
59
+
60
+ ```toml
61
+ [mcp_servers.thetoolforthat]
62
+ command = "npx"
63
+ args = ["thetoolforthat", "mcp"]
64
+ ```
65
+
66
+ </details>
67
+
68
+ <details>
69
+ <summary><strong>OpenCode</strong></summary>
70
+
71
+ ```bash
72
+ npx thetoolforthat init --client opencode
73
+ ```
74
+
75
+ Restart OpenCode and you're ready.
76
+
77
+ </details>
78
+
79
+ ### Manual Configuration
80
+
81
+ Add to your MCP config:
14
82
 
15
83
  ```json
16
84
  {
17
85
  "mcpServers": {
18
86
  "thetoolforthat": {
19
87
  "command": "npx",
20
- "args": ["thetoolforthat"]
88
+ "args": ["thetoolforthat", "mcp"]
21
89
  }
22
90
  }
23
91
  }
24
92
  ```
25
93
 
26
- That's it. The server fetches the latest tools from this repo (cached 5 minutes).
27
-
28
94
  ### Available Tools
29
95
 
30
96
  | Tool | Description |
package/cli.js ADDED
@@ -0,0 +1,186 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { program } from "commander";
4
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
5
+ import { homedir } from "os";
6
+ import { join } from "path";
7
+ import { spawn } from "child_process";
8
+ import { fileURLToPath } from "url";
9
+ import { dirname } from "path";
10
+
11
+ const __filename = fileURLToPath(import.meta.url);
12
+ const __dirname = dirname(__filename);
13
+
14
+ const CONFIG_PATHS = {
15
+ claude: join(homedir(), ".claude", "settings.json"),
16
+ cursor: join(process.cwd(), ".cursor", "mcp.json"),
17
+ vscode: join(process.cwd(), ".vscode", "mcp.json"),
18
+ codex: join(homedir(), ".codex", "config.toml"),
19
+ opencode: join(homedir(), ".opencode", "mcp.json"),
20
+ };
21
+
22
+ const MCP_CONFIG = {
23
+ command: "npx",
24
+ args: ["thetoolforthat", "mcp"],
25
+ };
26
+
27
+ function ensureDir(filePath) {
28
+ const dir = dirname(filePath);
29
+ if (!existsSync(dir)) {
30
+ mkdirSync(dir, { recursive: true });
31
+ }
32
+ }
33
+
34
+ function readJsonConfig(path) {
35
+ if (!existsSync(path)) {
36
+ return {};
37
+ }
38
+ try {
39
+ return JSON.parse(readFileSync(path, "utf-8"));
40
+ } catch {
41
+ return {};
42
+ }
43
+ }
44
+
45
+ function writeJsonConfig(path, config) {
46
+ ensureDir(path);
47
+ writeFileSync(path, JSON.stringify(config, null, 2) + "\n");
48
+ }
49
+
50
+ function initClaude() {
51
+ const configPath = CONFIG_PATHS.claude;
52
+ const config = readJsonConfig(configPath);
53
+
54
+ if (!config.mcpServers) {
55
+ config.mcpServers = {};
56
+ }
57
+
58
+ config.mcpServers.thetoolforthat = MCP_CONFIG;
59
+
60
+ writeJsonConfig(configPath, config);
61
+ console.log(`✓ Added thetoolforthat to ${configPath}`);
62
+ console.log("\nRestart Claude Code and try:");
63
+ console.log(" - Search for animation libraries");
64
+ console.log(" - Recommend tools for building a SaaS dashboard");
65
+ console.log(" - List all design agencies");
66
+ }
67
+
68
+ function initCursor() {
69
+ const configPath = CONFIG_PATHS.cursor;
70
+ const config = readJsonConfig(configPath);
71
+
72
+ if (!config.mcpServers) {
73
+ config.mcpServers = {};
74
+ }
75
+
76
+ config.mcpServers.thetoolforthat = MCP_CONFIG;
77
+
78
+ writeJsonConfig(configPath, config);
79
+ console.log(`✓ Added thetoolforthat to ${configPath}`);
80
+ console.log("\nOpen Cursor Settings and enable the MCP server for thetoolforthat.");
81
+ console.log("\nThen try:");
82
+ console.log(" - Search for animation libraries");
83
+ console.log(" - Recommend tools for building a SaaS dashboard");
84
+ }
85
+
86
+ function initVscode() {
87
+ const configPath = CONFIG_PATHS.vscode;
88
+ const config = readJsonConfig(configPath);
89
+
90
+ if (!config.servers) {
91
+ config.servers = {};
92
+ }
93
+
94
+ config.servers.thetoolforthat = MCP_CONFIG;
95
+
96
+ writeJsonConfig(configPath, config);
97
+ console.log(`✓ Added thetoolforthat to ${configPath}`);
98
+ console.log("\nOpen .vscode/mcp.json and click Start next to thetoolforthat.");
99
+ console.log("\nThen try with GitHub Copilot:");
100
+ console.log(" - Search for animation libraries");
101
+ console.log(" - Recommend tools for building a SaaS dashboard");
102
+ }
103
+
104
+ function initCodex() {
105
+ console.log(`To configure Codex, add this to ~/.codex/config.toml:\n`);
106
+ console.log(`[mcp_servers.thetoolforthat]`);
107
+ console.log(`command = "npx"`);
108
+ console.log(`args = ["thetoolforthat", "mcp"]`);
109
+ console.log("\nThen restart Codex and try:");
110
+ console.log(" - Search for animation libraries");
111
+ console.log(" - Recommend tools for building a SaaS dashboard");
112
+ }
113
+
114
+ function initOpencode() {
115
+ const configPath = CONFIG_PATHS.opencode;
116
+ const config = readJsonConfig(configPath);
117
+
118
+ if (!config.mcpServers) {
119
+ config.mcpServers = {};
120
+ }
121
+
122
+ config.mcpServers.thetoolforthat = MCP_CONFIG;
123
+
124
+ writeJsonConfig(configPath, config);
125
+ console.log(`✓ Added thetoolforthat to ${configPath}`);
126
+ console.log("\nRestart OpenCode and try:");
127
+ console.log(" - Search for animation libraries");
128
+ console.log(" - Recommend tools for building a SaaS dashboard");
129
+ }
130
+
131
+ program
132
+ .name("thetoolforthat")
133
+ .description("Curated tools, resources, and agencies for builders")
134
+ .version("1.0.0");
135
+
136
+ program
137
+ .command("init")
138
+ .description("Configure the MCP server for your AI coding client")
139
+ .option("-c, --client <client>", "Client to configure (claude, cursor, vscode, codex, opencode)")
140
+ .action((options) => {
141
+ const client = options.client?.toLowerCase();
142
+
143
+ if (!client) {
144
+ console.log("Available clients: claude, cursor, vscode, codex, opencode");
145
+ console.log("\nUsage: npx thetoolforthat init --client <client>");
146
+ console.log("Example: npx thetoolforthat init --client claude");
147
+ return;
148
+ }
149
+
150
+ switch (client) {
151
+ case "claude":
152
+ initClaude();
153
+ break;
154
+ case "cursor":
155
+ initCursor();
156
+ break;
157
+ case "vscode":
158
+ initVscode();
159
+ break;
160
+ case "codex":
161
+ initCodex();
162
+ break;
163
+ case "opencode":
164
+ initOpencode();
165
+ break;
166
+ default:
167
+ console.error(`Unknown client: ${client}`);
168
+ console.log("Available clients: claude, cursor, vscode, codex, opencode");
169
+ process.exit(1);
170
+ }
171
+ });
172
+
173
+ program
174
+ .command("mcp")
175
+ .description("Start the MCP server")
176
+ .action(async () => {
177
+ // Import and run the server
178
+ await import("./server.js");
179
+ });
180
+
181
+ // Default command (no args) - show help
182
+ program.action(() => {
183
+ program.help();
184
+ });
185
+
186
+ program.parse();
package/package.json CHANGED
@@ -1,17 +1,18 @@
1
1
  {
2
2
  "name": "thetoolforthat",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "MCP server for searching curated developer tools, design resources, and agencies",
5
5
  "type": "module",
6
- "main": "server.js",
6
+ "main": "cli.js",
7
7
  "bin": {
8
- "thetoolforthat": "./server.js"
8
+ "thetoolforthat": "./cli.js"
9
9
  },
10
10
  "files": [
11
+ "cli.js",
11
12
  "server.js"
12
13
  ],
13
14
  "scripts": {
14
- "start": "node server.js"
15
+ "start": "node cli.js mcp"
15
16
  },
16
17
  "keywords": [
17
18
  "mcp",
@@ -32,6 +33,7 @@
32
33
  "homepage": "https://github.com/pipeabellos/thetoolforthat#readme",
33
34
  "dependencies": {
34
35
  "@modelcontextprotocol/sdk": "^1.25.2",
36
+ "commander": "^14.0.2",
35
37
  "zod": "^4.3.5"
36
38
  }
37
39
  }
package/server.js CHANGED
File without changes