@neural-tools/cli 0.1.6 → 0.1.7

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/README.md CHANGED
@@ -1,11 +1,11 @@
1
1
  # @neural-tools/cli
2
2
 
3
- > CLI for Neural Tools - Generate MCPs, Claude commands, and AI workflows
3
+ > CLI for Neural Tools - Generate MCPs, Claude commands, skills, plugins, and AI workflows
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/@neural-tools/cli)](https://www.npmjs.com/package/@neural-tools/cli)
6
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](../../LICENSE.md)
7
7
 
8
- The main CLI tool for Neural Tools, providing commands to generate MCP servers, Claude commands, agents, and deploy AI-powered applications.
8
+ The main CLI tool for Neural Tools, providing commands to generate MCP servers, Claude commands, skills, agents, plugins, and deploy AI-powered applications.
9
9
 
10
10
  ## Installation
11
11
 
@@ -123,6 +123,59 @@ neural-tools generate agent code-reviewer \
123
123
 
124
124
  ---
125
125
 
126
+ ### `generate skill`
127
+
128
+ Generate a Claude Code skill (`SKILL.md`) for local/global use or inside a plugin.
129
+
130
+ ```bash
131
+ neural-tools generate skill <name> [options]
132
+
133
+ Options:
134
+ -d, --description <desc> Description of the skill
135
+ -o, --output <dir> Output directory (default: ./claude/skills)
136
+ --plugin <dir> Create skill in <dir>/skills/<name>
137
+ --references Create references/ scaffold
138
+ --global Install globally to ~/.claude/skills
139
+ --dry-run Preview without creating files
140
+ ```
141
+
142
+ **Example:**
143
+
144
+ ```bash
145
+ neural-tools generate skill api-review \
146
+ --description "Review API design and docs for consistency" \
147
+ --references
148
+ ```
149
+
150
+ ---
151
+
152
+ ### `generate plugin`
153
+
154
+ Generate a Claude Code plugin scaffold with `.claude-plugin/plugin.json`.
155
+
156
+ ```bash
157
+ neural-tools generate plugin <name> [options]
158
+
159
+ Options:
160
+ -d, --description <desc> Description of the plugin
161
+ -o, --output <dir> Output directory (default: ./claude/plugins)
162
+ --version <version> Plugin version (default: 0.1.0)
163
+ --author <author> Plugin author
164
+ --with-skill <name> Create a starter skill in the plugin
165
+ --dry-run Preview without creating files
166
+ ```
167
+
168
+ **Example:**
169
+
170
+ ```bash
171
+ neural-tools generate plugin engineering-workflows \
172
+ --description "Internal engineering workflows for Claude Code" \
173
+ --author "ACME Inc." \
174
+ --with-skill bug-triage
175
+ ```
176
+
177
+ ---
178
+
126
179
  ### `deploy`
127
180
 
128
181
  Deploy an MCP server to AWS or GCP.
@@ -189,8 +242,15 @@ my-project/
189
242
  ├── claude/
190
243
  │ ├── commands/ # Slash commands
191
244
  │ │ └── search-docs.md
245
+ │ ├── skills/ # Standalone Claude skills
246
+ │ │ └── api-review/SKILL.md
192
247
  │ └── agents/ # Specialized agents
193
248
  │ └── code-reviewer.md
249
+ │ └── plugins/ # Claude plugins
250
+ │ └── engineering-workflows/
251
+ │ ├── .claude-plugin/plugin.json
252
+ │ └── skills/
253
+ │ └── bug-triage/SKILL.md
194
254
  └── package.json
195
255
  ```
196
256
 
package/dist/cli.js CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var B=Object.create;var _=Object.defineProperty;var z=Object.getOwnPropertyDescriptor;var V=Object.getOwnPropertyNames;var H=Object.getPrototypeOf,J=Object.prototype.hasOwnProperty;var Q=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of V(t))!J.call(e,r)&&r!==o&&_(e,r,{get:()=>t[r],enumerable:!(n=z(t,r))||n.enumerable});return e};var l=(e,t,o)=>(o=e!=null?B(H(e)):{},Q(t||!e||!e.__esModule?_(o,"default",{value:e,enumerable:!0}):o,e));var W=require("commander"),K=require("@neural-tools/core");var m=l(require("path")),p=l(require("fs-extra")),d=require("@neural-tools/core"),S=l(require("inquirer"));async function G(e,t){d.logger.header(`Generating MCP: ${e}`),t.deployment!=="none"&&await(0,d.requireFeature)("cloud-deployment","Cloud Deployment");let o=t.description;o||(o=(await S.default.prompt([{type:"input",name:"description",message:"Description of your MCP:",default:`${e} MCP server`}])).description);let n=m.default.resolve(t.output||"./apps",e);if(t.dryRun){d.logger.info("Dry run mode - no files will be created"),d.logger.section("Configuration",[`Name: ${e}`,`Description: ${o}`,`Output: ${n}`,`Template: ${t.fastmcp?"FastMCP":"Standard"}`,`CI/CD: ${t.cicd}`,`Deployment: ${t.deployment}`]);return}if(await p.default.pathExists(n)){let{overwrite:r}=await S.default.prompt([{type:"confirm",name:"overwrite",message:`Directory ${n} already exists. Overwrite?`,default:!1}]);if(!r){d.logger.warn("Cancelled");return}await p.default.remove(n)}d.logger.startSpinner("Creating MCP structure...");try{await p.default.ensureDir(n);let r=`[project]
2
+ "use strict";var ne=Object.create;var L=Object.defineProperty;var re=Object.getOwnPropertyDescriptor;var oe=Object.getOwnPropertyNames;var se=Object.getPrototypeOf,ae=Object.prototype.hasOwnProperty;var le=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of oe(t))!ae.call(e,r)&&r!==n&&L(e,r,{get:()=>t[r],enumerable:!(i=re(t,r))||i.enumerable});return e};var l=(e,t,n)=>(n=e!=null?ne(se(e)):{},le(t||!e||!e.__esModule?L(n,"default",{value:e,enumerable:!0}):n,e));var te=require("commander"),ie=require("@neural-tools/core");var f=l(require("path")),m=l(require("fs-extra")),g=require("@neural-tools/core"),j=l(require("inquirer"));async function N(e,t){g.logger.header(`Generating MCP: ${e}`),t.deployment!=="none"&&await(0,g.requireFeature)("cloud-deployment","Cloud Deployment");let n=t.description;n||(n=(await j.default.prompt([{type:"input",name:"description",message:"Description of your MCP:",default:`${e} MCP server`}])).description);let i=f.default.resolve(t.output||"./apps",e);if(t.dryRun){g.logger.info("Dry run mode - no files will be created"),g.logger.section("Configuration",[`Name: ${e}`,`Description: ${n}`,`Output: ${i}`,`Template: ${t.fastmcp?"FastMCP":"Standard"}`,`CI/CD: ${t.cicd}`,`Deployment: ${t.deployment}`]);return}if(await m.default.pathExists(i)){let{overwrite:r}=await j.default.prompt([{type:"confirm",name:"overwrite",message:`Directory ${i} already exists. Overwrite?`,default:!1}]);if(!r){g.logger.warn("Cancelled");return}await m.default.remove(i)}g.logger.startSpinner("Creating MCP structure...");try{await m.default.ensureDir(i);let r=`[project]
3
3
  name = "mcp-${e}"
4
4
  version = "0.1.0"
5
- description = "${o}"
5
+ description = "${n}"
6
6
  requires-python = ">=3.10"
7
7
  dependencies = [
8
8
  "fastmcp>=2.2.0",
@@ -24,10 +24,10 @@ line-length = 100
24
24
 
25
25
  [tool.ruff]
26
26
  line-length = 100
27
- `;await p.default.writeFile(m.default.join(n,"pyproject.toml"),r,"utf-8");let i=`"""
27
+ `;await m.default.writeFile(f.default.join(i,"pyproject.toml"),r,"utf-8");let o=`"""
28
28
  ${e} MCP Server
29
29
 
30
- ${o}
30
+ ${n}
31
31
  """
32
32
  from fastmcp import FastMCP
33
33
 
@@ -83,9 +83,9 @@ def brainstorm_topic(topic: str) -> str:
83
83
 
84
84
  if __name__ == "__main__":
85
85
  mcp.run()
86
- `;await p.default.writeFile(m.default.join(n,"server.py"),i,"utf-8");let s=`# ${e} MCP Server
86
+ `;await m.default.writeFile(f.default.join(i,"server.py"),o,"utf-8");let s=`# ${e} MCP Server
87
87
 
88
- ${o}
88
+ ${n}
89
89
 
90
90
  ## Quick Start with Docker
91
91
 
@@ -190,7 +190,7 @@ ruff check .
190
190
  ## License
191
191
 
192
192
  MIT
193
- `;await p.default.writeFile(m.default.join(n,"README.md"),s,"utf-8"),await p.default.writeFile(m.default.join(n,"Dockerfile"),`FROM python:3.11-slim
193
+ `;await m.default.writeFile(f.default.join(i,"README.md"),s,"utf-8"),await m.default.writeFile(f.default.join(i,"Dockerfile"),`FROM python:3.11-slim
194
194
 
195
195
  WORKDIR /app
196
196
 
@@ -206,7 +206,7 @@ RUN uv pip install --system --no-cache .
206
206
 
207
207
  # Run the MCP server
208
208
  CMD ["python", "server.py"]
209
- `,"utf-8");let h=`version: '3.8'
209
+ `,"utf-8");let p=`version: '3.8'
210
210
 
211
211
  services:
212
212
  mcp:
@@ -219,7 +219,7 @@ services:
219
219
  - .:/app
220
220
  environment:
221
221
  - PYTHONUNBUFFERED=1
222
- `;if(await p.default.writeFile(m.default.join(n,"docker-compose.yml"),h,"utf-8"),await p.default.writeFile(m.default.join(n,".dockerignore"),`__pycache__
222
+ `;if(await m.default.writeFile(f.default.join(i,"docker-compose.yml"),p,"utf-8"),await m.default.writeFile(f.default.join(i,".dockerignore"),`__pycache__
223
223
  *.pyc
224
224
  *.pyo
225
225
  *.pyd
@@ -236,7 +236,7 @@ venv
236
236
  .git
237
237
  .github
238
238
  README.md
239
- `,"utf-8"),t.cicd==="github"){await p.default.ensureDir(m.default.join(n,".github","workflows"));let C=`name: Deploy MCP
239
+ `,"utf-8"),t.cicd==="github"){await m.default.ensureDir(f.default.join(i,".github","workflows"));let v=`name: Deploy MCP
240
240
 
241
241
  on:
242
242
  push:
@@ -320,22 +320,22 @@ jobs:
320
320
  run: |
321
321
  gcloud builds submit --tag gcr.io/\${{ secrets.GCP_PROJECT_ID }}/mcp-${e}:latest
322
322
  `:""}
323
- `;await p.default.writeFile(m.default.join(n,".github","workflows","deploy.yml"),C,"utf-8")}d.logger.succeedSpinner("MCP created successfully!"),d.logger.section("Next steps",[`1. cd ${n}`,"2. docker-compose up # Start with Docker","","Or for local development:","2. uv pip install -e .","3. python server.py","","Or use MCP Inspector:","2. uv pip install -e .","3. fastmcp dev server.py","","Add to Claude Code settings to use this MCP"]),d.logger.success(`\u2728 MCP "${e}" ready to use!`)}catch(r){throw d.logger.failSpinner("Failed to create MCP"),r}}var $=l(require("path")),O=l(require("os")),b=l(require("fs-extra")),g=require("@neural-tools/core"),R=l(require("inquirer"));async function T(e,t){g.logger.header(`Generating Claude Command: /${e}`);let o=t.description;o||(o=(await R.default.prompt([{type:"input",name:"description",message:"Description of your command:",default:`Execute ${e}`}])).description);let n;t.global?n=$.default.join(O.default.homedir(),".claude","commands"):n=$.default.resolve(t.output||"./claude/commands");let r=$.default.join(n,`${e}.md`);if(t.dryRun){g.logger.info("Dry run mode - no files will be created"),g.logger.section("Configuration",[`Name: /${e}`,`Description: ${o}`,`Output: ${r}`,`Arguments: ${t.args?.join(", ")||"none"}`,`Allowed Tools: ${t.tools?.join(", ")||"all"}`,`Global: ${t.global?"Yes":"No"}`]);return}if(await b.default.pathExists(r)){let{overwrite:i}=await R.default.prompt([{type:"confirm",name:"overwrite",message:`Command /${e} already exists. Overwrite?`,default:!1}]);if(!i){g.logger.warn("Cancelled");return}}g.logger.startSpinner("Creating Claude command...");try{await b.default.ensureDir(n);let i=["---"];t.args&&t.args.length>0&&i.push(`argument-hint: ${t.args.join(" ")}`),i.push(`description: ${o}`),t.tools&&t.tools.length>0&&(i.push("allowed-tools:"),t.tools.forEach(C=>{i.push(` - ${C}`)})),i.push("---"),i.push("");let s=t.args||[],v=s.map((C,D)=>`$${D+1}`).join(" "),h=s.length>0?`
323
+ `;await m.default.writeFile(f.default.join(i,".github","workflows","deploy.yml"),v,"utf-8")}g.logger.succeedSpinner("MCP created successfully!"),g.logger.section("Next steps",[`1. cd ${i}`,"2. docker-compose up # Start with Docker","","Or for local development:","2. uv pip install -e .","3. python server.py","","Or use MCP Inspector:","2. uv pip install -e .","3. fastmcp dev server.py","","Add to Claude Code settings to use this MCP"]),g.logger.success(`\u2728 MCP "${e}" ready to use!`)}catch(r){throw g.logger.failSpinner("Failed to create MCP"),r}}var O=l(require("path")),Y=l(require("os")),G=l(require("fs-extra")),y=require("@neural-tools/core"),I=l(require("inquirer"));async function q(e,t){y.logger.header(`Generating Claude Command: /${e}`);let n=t.description;n||(n=(await I.default.prompt([{type:"input",name:"description",message:"Description of your command:",default:`Execute ${e}`}])).description);let i;t.global?i=O.default.join(Y.default.homedir(),".claude","commands"):i=O.default.resolve(t.output||"./claude/commands");let r=O.default.join(i,`${e}.md`);if(t.dryRun){y.logger.info("Dry run mode - no files will be created"),y.logger.section("Configuration",[`Name: /${e}`,`Description: ${n}`,`Output: ${r}`,`Arguments: ${t.args?.join(", ")||"none"}`,`Allowed Tools: ${t.tools?.join(", ")||"all"}`,`Global: ${t.global?"Yes":"No"}`]);return}if(await G.default.pathExists(r)){let{overwrite:o}=await I.default.prompt([{type:"confirm",name:"overwrite",message:`Command /${e} already exists. Overwrite?`,default:!1}]);if(!o){y.logger.warn("Cancelled");return}}y.logger.startSpinner("Creating Claude command...");try{await G.default.ensureDir(i);let o=["---"];t.args&&t.args.length>0&&o.push(`argument-hint: ${t.args.join(" ")}`),o.push(`description: ${n}`),t.tools&&t.tools.length>0&&(o.push("allowed-tools:"),t.tools.forEach(v=>{o.push(` - ${v}`)})),o.push("---"),o.push("");let s=t.args||[],u=s.map((v,E)=>`$${E+1}`).join(" "),p=s.length>0?`
324
324
 
325
325
  Arguments:
326
- ${s.map((C,D)=>`- $${D+1}: ${C}`).join(`
327
- `)}`:"",M=`${i.join(`
326
+ ${s.map((v,E)=>`- $${E+1}: ${v}`).join(`
327
+ `)}`:"",R=`${o.join(`
328
328
  `)}# ${e} Command
329
329
 
330
- Execute the ${e} operation${h?":"+h:"."}
330
+ Execute the ${e} operation${p?":"+p:"."}
331
331
 
332
- ${v?`Using arguments: ${v}`:""}
332
+ ${u?`Using arguments: ${u}`:""}
333
333
 
334
334
  Please proceed with the ${e} operation.
335
- `;await b.default.writeFile(r,M,"utf-8"),g.logger.succeedSpinner("Claude command created successfully!"),g.logger.section("Next steps",[t.global?`Command /${e} is now available globally in Claude Code`:`Add the command to your project by copying ${r}`,"","Usage:",s.length>0?` /${e} ${s.join(" ")}`:` /${e}`]),g.logger.success(`\u2728 Command "/${e}" ready to use!`)}catch(i){throw g.logger.failSpinner("Failed to create command"),i}}var P=l(require("path")),I=l(require("os")),k=l(require("fs-extra")),f=require("@neural-tools/core"),E=l(require("inquirer"));async function F(e,t){f.logger.header(`Generating Claude Agent: ${e}`);let o=t.description;o||(o=(await E.default.prompt([{type:"input",name:"description",message:"Description of your agent:",default:`${e} specialized agent`}])).description);let n;t.global?n=P.default.join(I.default.homedir(),".claude","agents"):n=P.default.resolve(t.output||"./claude/agents");let r=P.default.join(n,`${e}.md`),i=t.model||"sonnet";if(t.dryRun){f.logger.info("Dry run mode - no files will be created"),f.logger.section("Configuration",[`Name: ${e}`,`Description: ${o}`,`Output: ${r}`,`Model: ${i}`,`Tools: ${t.tools?.join(", ")||"all"}`,`Global: ${t.global?"Yes":"No"}`]);return}if(await k.default.pathExists(r)){let{overwrite:s}=await E.default.prompt([{type:"confirm",name:"overwrite",message:`Agent ${e} already exists. Overwrite?`,default:!1}]);if(!s){f.logger.warn("Cancelled");return}}f.logger.startSpinner("Creating Claude agent...");try{await k.default.ensureDir(n);let s=["---"];s.push(`model: claude-${i}-4-5`),t.tools&&t.tools.length>0&&(s.push("tools:"),t.tools.forEach(h=>{s.push(` - ${h}`)})),s.push("---"),s.push("");let v=`${s.join(`
335
+ `;await G.default.writeFile(r,R,"utf-8"),y.logger.succeedSpinner("Claude command created successfully!"),y.logger.section("Next steps",[t.global?`Command /${e} is now available globally in Claude Code`:`Add the command to your project by copying ${r}`,"","Usage:",s.length>0?` /${e} ${s.join(" ")}`:` /${e}`]),y.logger.success(`\u2728 Command "/${e}" ready to use!`)}catch(o){throw y.logger.failSpinner("Failed to create command"),o}}var M=l(require("path")),U=l(require("os")),_=l(require("fs-extra")),h=require("@neural-tools/core"),F=l(require("inquirer"));async function W(e,t){h.logger.header(`Generating Claude Agent: ${e}`);let n=t.description;n||(n=(await F.default.prompt([{type:"input",name:"description",message:"Description of your agent:",default:`${e} specialized agent`}])).description);let i;t.global?i=M.default.join(U.default.homedir(),".claude","agents"):i=M.default.resolve(t.output||"./claude/agents");let r=M.default.join(i,`${e}.md`),o=t.model||"sonnet";if(t.dryRun){h.logger.info("Dry run mode - no files will be created"),h.logger.section("Configuration",[`Name: ${e}`,`Description: ${n}`,`Output: ${r}`,`Model: ${o}`,`Tools: ${t.tools?.join(", ")||"all"}`,`Global: ${t.global?"Yes":"No"}`]);return}if(await _.default.pathExists(r)){let{overwrite:s}=await F.default.prompt([{type:"confirm",name:"overwrite",message:`Agent ${e} already exists. Overwrite?`,default:!1}]);if(!s){h.logger.warn("Cancelled");return}}h.logger.startSpinner("Creating Claude agent...");try{await _.default.ensureDir(i);let s=["---"];s.push(`model: claude-${o}-4-5`),t.tools&&t.tools.length>0&&(s.push("tools:"),t.tools.forEach(p=>{s.push(` - ${p}`)})),s.push("---"),s.push("");let u=`${s.join(`
336
336
  `)}# ${e} Agent
337
337
 
338
- ${o}
338
+ ${n}
339
339
 
340
340
  ## Role
341
341
 
@@ -361,4 +361,33 @@ Provide clear, structured responses that:
361
361
  - [Output requirement 3]
362
362
 
363
363
  Focus on ${e} and deliver actionable results.
364
- `;await k.default.writeFile(r,v,"utf-8"),f.logger.succeedSpinner("Claude agent created successfully!"),f.logger.section("Next steps",[t.global?`Agent ${e} is now available globally in Claude Code`:`Add the agent to your project by copying ${r}`,"","Customize the agent by editing:",` ${r}`,"","Use the agent via the Task tool in Claude Code"]),f.logger.success(`\u2728 Agent "${e}" ready to use!`)}catch(s){throw f.logger.failSpinner("Failed to create agent"),s}}var a=require("@neural-tools/core"),j=require("execa"),x=l(require("path")),L=l(require("fs-extra"));async function N(e,t){a.logger.header(`Deploying MCP: ${e}`),await(0,a.requireFeature)("cloud-deployment","Cloud Deployment");let o=t.platform||"aws",n=t.env||"dev";a.logger.info(`Platform: ${o}`),a.logger.info(`Environment: ${n}`);let r=x.default.resolve("./apps",e);if(!await L.default.pathExists(r))throw new Error(`MCP "${e}" not found at ${r}`);a.logger.startSpinner("Building MCP...");try{await(0,j.execa)("npm",["run","build"],{cwd:r,stdio:"pipe"}),a.logger.succeedSpinner("MCP built successfully"),o==="aws"?await X(e,r,t):o==="gcp"&&await Z(e,r,t),a.logger.success(`\u2728 MCP "${e}" deployed successfully!`)}catch(i){throw a.logger.failSpinner("Deployment failed"),i}}async function X(e,t,o){a.logger.startSpinner("Deploying to AWS Lambda..."),a.logger.updateSpinner("Packaging Lambda function..."),await new Promise(n=>setTimeout(n,1e3)),a.logger.updateSpinner("Uploading to S3..."),await new Promise(n=>setTimeout(n,1e3)),a.logger.updateSpinner("Creating/updating Lambda function..."),await new Promise(n=>setTimeout(n,1e3)),a.logger.succeedSpinner("Deployed to AWS Lambda"),a.logger.section("Deployment Info",[`Function: ${e}-${o.env}`,`Region: ${o.region||"us-east-1"}`,`Environment: ${o.env}`,"","Configure in Claude Code:",JSON.stringify({mcpServers:{[e]:{command:"aws",args:["lambda","invoke","--function-name",`${e}-${o.env}`,"--payload","stdin","--output","stdout"]}}},null,2)])}async function Z(e,t,o){a.logger.startSpinner("Deploying to Google Cloud Functions..."),a.logger.updateSpinner("Packaging function..."),await new Promise(n=>setTimeout(n,1e3)),a.logger.updateSpinner("Uploading to Cloud Storage..."),await new Promise(n=>setTimeout(n,1e3)),a.logger.updateSpinner("Deploying Cloud Function..."),await new Promise(n=>setTimeout(n,1e3)),a.logger.succeedSpinner("Deployed to Google Cloud Functions"),a.logger.section("Deployment Info",[`Function: ${e}-${o.env}`,`Region: ${o.region||"us-central1"}`,`Environment: ${o.env}`])}var c=require("@neural-tools/core"),Y=l(require("inquirer"));async function q(e){c.logger.header("AI Toolkit License Management");let t=e.key;if(t||(t=(await Y.default.prompt([{type:"input",name:"licenseKey",message:"Enter your license key:",validate:n=>!n||n.trim().length===0?"License key is required":!0}])).licenseKey),!t){c.logger.error("License key is required");return}c.logger.startSpinner("Validating license...");try{let o=t.split("-");if(o.length<2)throw new Error("Invalid license key format");let n=o[0],r=o[1];if(!Object.values(c.LicenseTier).includes(n))throw new Error("Invalid license tier");await c.licenseManager.saveLicense({tier:n,email:r,key:t,features:[]}),c.logger.succeedSpinner("License activated successfully!");let i=await c.licenseManager.loadLicense();c.logger.section("License Details",[`Tier: ${i.tier.toUpperCase()}`,`Email: ${i.email||"N/A"}`,"Status: Active"]);let s=ee();c.logger.section("Available Features",s),c.logger.success("\u2728 Ready to build!")}catch(o){c.logger.failSpinner("License validation failed"),c.logger.error(o.message||"Invalid license key"),c.logger.newline(),c.logger.info("All features are available for free - no license required!")}}function ee(){return["\u2713 MCP generation","\u2713 Claude commands","\u2713 Claude agents","\u2713 Vector database integration","\u2713 Semantic caching","\u2713 Fine-tuning workflows","\u2713 Cloud deployment (AWS/GCP)","\u2713 GitHub automation","\u2713 All templates"]}var u=require("@neural-tools/core");async function U(){u.logger.header("AI Toolkit Status");try{let e=await u.licenseManager.loadLicense();u.logger.section("License Information",[`Tier: ${e.tier.toUpperCase()}`,`Email: ${e.email||"N/A"}`,`Status: ${e.expiresAt?te(e.expiresAt):"Active"}`]);let t=[{name:"MCP Generation",key:"mcp-generation"},{name:"Claude Commands",key:"claude-commands"},{name:"Vector Database",key:"vector-db"},{name:"Semantic Cache",key:"semantic-cache"},{name:"Fine-tuning",key:"fine-tuning"},{name:"Cloud Deployment",key:"cloud-deployment"},{name:"GitHub Automation",key:"github-automation"}],o=await Promise.all(t.map(async n=>`${await u.licenseManager.checkFeature(n.key)?"\u2713":"\u2717"} ${n.name}`));u.logger.section("Feature Availability",o),u.logger.newline(),u.logger.section("Quick Start",["Generate an MCP server:"," ai-toolkit generate mcp github","","Generate a Claude command:"," ai-toolkit generate command search-kb","","View all commands:"," ai-toolkit --help"])}catch{u.logger.error("Failed to load license information"),u.logger.newline(),u.logger.info("All features are available - no license required!"),u.logger.info('Run "ai-toolkit --help" to get started')}}function te(e){let t=new Date(e),o=new Date;if(t<o)return"Expired";let n=Math.ceil((t.getTime()-o.getTime())/(1e3*60*60*24));return n<=30?`Active (expires in ${n} days)`:"Active"}var y=new W.Command;y.name("neural-tools").description("Neural Tools - Build MCPs, Claude commands, and AI workflows").version("0.1.0");var A=y.command("generate").alias("g").description("Generate new components (MCP, command, agent, etc.)");A.command("mcp").description("Generate a new MCP server").argument("<name>","Name of the MCP server").option("-d, --description <desc>","Description of the MCP").option("-o, --output <dir>","Output directory","./apps").option("--fastmcp","Use FastMCP template",!0).option("--cicd <provider>","CI/CD provider (github, harness, none)","github").option("--deployment <platform>","Deployment platform (aws, gcp, none)","aws").option("--dry-run","Preview without creating files",!1).action(G);A.command("command").description("Generate a new Claude command").argument("<name>","Name of the command (without /)").option("-d, --description <desc>","Description of the command").option("-o, --output <dir>","Output directory","./claude/commands").option("--args <arguments...>","Command arguments").option("--tools <tools...>","Allowed tools").option("--global","Install globally to ~/.claude/commands",!1).option("--dry-run","Preview without creating files",!1).action(T);A.command("agent").description("Generate a new Claude agent").argument("<name>","Name of the agent").option("-d, --description <desc>","Description of the agent").option("-o, --output <dir>","Output directory","./claude/agents").option("--model <model>","Model to use (sonnet, opus, haiku)","sonnet").option("--tools <tools...>","Available tools").option("--global","Install globally to ~/.claude/agents",!1).option("--dry-run","Preview without creating files",!1).action(F);y.command("deploy").description("Deploy an MCP server").argument("<name>","Name of the MCP to deploy").option("-p, --platform <platform>","Deployment platform (aws, gcp)","aws").option("--region <region>","AWS/GCP region").option("--env <env>","Environment (dev, staging, prod)","dev").action(N);y.command("login").description("Authenticate and manage your license").option("--key <key>","License key").action(q);y.command("status").description("Show license status and available features").action(U);y.exitOverride();try{y.parse(process.argv)}catch(e){e.code!=="commander.help"&&e.code!=="commander.version"&&(K.logger.error(e.message||"An unexpected error occurred"),process.exit(1))}
364
+ `;await _.default.writeFile(r,u,"utf-8"),h.logger.succeedSpinner("Claude agent created successfully!"),h.logger.section("Next steps",[t.global?`Agent ${e} is now available globally in Claude Code`:`Add the agent to your project by copying ${r}`,"","Customize the agent by editing:",` ${r}`,"","Use the agent via the Task tool in Claude Code"]),h.logger.success(`\u2728 Agent "${e}" ready to use!`)}catch(s){throw h.logger.failSpinner("Failed to create agent"),s}}var k=l(require("path")),K=l(require("os")),D=l(require("fs-extra")),T=l(require("inquirer")),w=require("@neural-tools/core");async function B(e,t){w.logger.header(`Generating Claude Skill: ${e}`);let n=t.description;n||(n=(await T.default.prompt([{type:"input",name:"description",message:"Description of your skill:",default:`${e} skill for Claude Code`}])).description);let i=ce(t),r=k.default.join(i,e),o=k.default.join(r,"SKILL.md"),s=k.default.join(r,"references");if(t.dryRun){w.logger.info("Dry run mode - no files will be created"),w.logger.section("Configuration",[`Name: ${e}`,`Description: ${n}`,`Output: ${o}`,`Plugin: ${t.plugin||"none"}`,`References: ${t.references?"Yes":"No"}`,`Global: ${t.global?"Yes":"No"}`]);return}if(await D.default.pathExists(o)){let{overwrite:u}=await T.default.prompt([{type:"confirm",name:"overwrite",message:`Skill ${e} already exists. Overwrite?`,default:!1}]);if(!u){w.logger.warn("Cancelled");return}}w.logger.startSpinner("Creating Claude skill...");try{await D.default.ensureDir(r),t.references&&await D.default.ensureDir(s);let u=`---
365
+ name: ${e}
366
+ description: ${n}
367
+ ---
368
+
369
+ # ${e}
370
+
371
+ ${n}
372
+
373
+ ## When to use this skill
374
+
375
+ Use this skill when the request matches ${e} workflows.
376
+
377
+ ## Workflow
378
+
379
+ 1. Gather the relevant project context.
380
+ 2. Apply ${e} specific checks and implementation steps.
381
+ 3. Return concrete output and next actions.
382
+ `;if(await D.default.writeFile(o,u,"utf-8"),t.references){let p=`# References
383
+
384
+ Store focused reference material for the ${e} skill in this folder.
385
+ `;await D.default.writeFile(k.default.join(s,"README.md"),p,"utf-8")}w.logger.succeedSpinner("Claude skill created successfully!"),w.logger.section("Next steps",[`Edit the skill definition: ${o}`,t.references?`Add reference docs in: ${s}`:"Use --references to scaffold a references folder"]),w.logger.success(`\u2728 Skill "${e}" ready to use!`)}catch(u){throw w.logger.failSpinner("Failed to create skill"),u}}function ce(e){return e.plugin?k.default.resolve(e.plugin,"skills"):e.global?k.default.join(K.default.homedir(),".claude","skills"):k.default.resolve(e.output||"./claude/skills")}var b=l(require("path")),P=l(require("fs-extra")),x=l(require("inquirer")),C=require("@neural-tools/core");async function z(e,t){C.logger.header(`Generating Claude Plugin: ${e}`);let n=t.description;n||(n=(await x.default.prompt([{type:"input",name:"description",message:"Description of your plugin:",default:`${e} Claude Code plugin`}])).description);let i=n||`${e} Claude Code plugin`,r=b.default.resolve(t.output||"./claude/plugins",e),o=b.default.join(r,".claude-plugin"),s=b.default.join(o,"plugin.json"),u=b.default.join(r,"skills");if(t.dryRun){C.logger.info("Dry run mode - no files will be created"),C.logger.section("Configuration",[`Name: ${e}`,`Description: ${i}`,`Output: ${r}`,`Plugin config: ${s}`,`Version: ${t.version||"0.1.0"}`,`Author: ${t.author||"none"}`,`Starter skill: ${t.withSkill||"none"}`]);return}if(await P.default.pathExists(s)){let{overwrite:p}=await x.default.prompt([{type:"confirm",name:"overwrite",message:`Plugin ${e} already exists. Overwrite config?`,default:!1}]);if(!p){C.logger.warn("Cancelled");return}}C.logger.startSpinner("Creating Claude plugin...");try{await P.default.ensureDir(o),await P.default.ensureDir(u);let p={name:e,version:t.version||"0.1.0",description:i};if(t.author&&(p.author=t.author),await P.default.writeJSON(s,p,{spaces:2}),t.withSkill){let R=b.default.join(u,t.withSkill),v=b.default.join(R,"SKILL.md");await P.default.ensureDir(R);let E=`---
386
+ name: ${t.withSkill}
387
+ description: Starter skill for ${e}
388
+ ---
389
+
390
+ # ${t.withSkill}
391
+
392
+ Starter skill scaffolded with the plugin.
393
+ `;await P.default.writeFile(v,E,"utf-8")}C.logger.succeedSpinner("Claude plugin created successfully!"),C.logger.section("Next steps",[`Review plugin manifest: ${s}`,t.withSkill?`Customize skill: ${b.default.join(u,t.withSkill,"SKILL.md")}`:"Use `generate skill <name> --plugin <plugin-dir>` to add skills",`Install with Claude Code using the plugin path: ${r}`]),C.logger.success(`\u2728 Plugin "${e}" ready to use!`)}catch(p){throw C.logger.failSpinner("Failed to create plugin"),p}}var a=require("@neural-tools/core"),V=require("execa"),H=l(require("path")),J=l(require("fs-extra"));async function Q(e,t){a.logger.header(`Deploying MCP: ${e}`),await(0,a.requireFeature)("cloud-deployment","Cloud Deployment");let n=t.platform||"aws",i=t.env||"dev";a.logger.info(`Platform: ${n}`),a.logger.info(`Environment: ${i}`);let r=H.default.resolve("./apps",e);if(!await J.default.pathExists(r))throw new Error(`MCP "${e}" not found at ${r}`);a.logger.startSpinner("Building MCP...");try{await(0,V.execa)("npm",["run","build"],{cwd:r,stdio:"pipe"}),a.logger.succeedSpinner("MCP built successfully"),n==="aws"?await ue(e,r,t):n==="gcp"&&await pe(e,r,t),a.logger.success(`\u2728 MCP "${e}" deployed successfully!`)}catch(o){throw a.logger.failSpinner("Deployment failed"),o}}async function ue(e,t,n){a.logger.startSpinner("Deploying to AWS Lambda..."),a.logger.updateSpinner("Packaging Lambda function..."),await new Promise(i=>setTimeout(i,1e3)),a.logger.updateSpinner("Uploading to S3..."),await new Promise(i=>setTimeout(i,1e3)),a.logger.updateSpinner("Creating/updating Lambda function..."),await new Promise(i=>setTimeout(i,1e3)),a.logger.succeedSpinner("Deployed to AWS Lambda"),a.logger.section("Deployment Info",[`Function: ${e}-${n.env}`,`Region: ${n.region||"us-east-1"}`,`Environment: ${n.env}`,"","Configure in Claude Code:",JSON.stringify({mcpServers:{[e]:{command:"aws",args:["lambda","invoke","--function-name",`${e}-${n.env}`,"--payload","stdin","--output","stdout"]}}},null,2)])}async function pe(e,t,n){a.logger.startSpinner("Deploying to Google Cloud Functions..."),a.logger.updateSpinner("Packaging function..."),await new Promise(i=>setTimeout(i,1e3)),a.logger.updateSpinner("Uploading to Cloud Storage..."),await new Promise(i=>setTimeout(i,1e3)),a.logger.updateSpinner("Deploying Cloud Function..."),await new Promise(i=>setTimeout(i,1e3)),a.logger.succeedSpinner("Deployed to Google Cloud Functions"),a.logger.section("Deployment Info",[`Function: ${e}-${n.env}`,`Region: ${n.region||"us-central1"}`,`Environment: ${n.env}`])}var c=require("@neural-tools/core"),X=l(require("inquirer"));async function Z(e){c.logger.header("AI Toolkit License Management");let t=e.key;if(t||(t=(await X.default.prompt([{type:"input",name:"licenseKey",message:"Enter your license key:",validate:i=>!i||i.trim().length===0?"License key is required":!0}])).licenseKey),!t){c.logger.error("License key is required");return}c.logger.startSpinner("Validating license...");try{let n=t.split("-");if(n.length<2)throw new Error("Invalid license key format");let i=n[0],r=n[1];if(!Object.values(c.LicenseTier).includes(i))throw new Error("Invalid license tier");await c.licenseManager.saveLicense({tier:i,email:r,key:t,features:[]}),c.logger.succeedSpinner("License activated successfully!");let o=await c.licenseManager.loadLicense();c.logger.section("License Details",[`Tier: ${o.tier.toUpperCase()}`,`Email: ${o.email||"N/A"}`,"Status: Active"]);let s=de();c.logger.section("Available Features",s),c.logger.success("\u2728 Ready to build!")}catch(n){c.logger.failSpinner("License validation failed"),c.logger.error(n.message||"Invalid license key"),c.logger.newline(),c.logger.info("All features are available for free - no license required!")}}function de(){return["\u2713 MCP generation","\u2713 Claude commands","\u2713 Claude agents","\u2713 Vector database integration","\u2713 Semantic caching","\u2713 Fine-tuning workflows","\u2713 Cloud deployment (AWS/GCP)","\u2713 GitHub automation","\u2713 All templates"]}var d=require("@neural-tools/core");async function ee(){d.logger.header("AI Toolkit Status");try{let e=await d.licenseManager.loadLicense();d.logger.section("License Information",[`Tier: ${e.tier.toUpperCase()}`,`Email: ${e.email||"N/A"}`,`Status: ${e.expiresAt?me(e.expiresAt):"Active"}`]);let t=[{name:"MCP Generation",key:"mcp-generation"},{name:"Claude Commands",key:"claude-commands"},{name:"Vector Database",key:"vector-db"},{name:"Semantic Cache",key:"semantic-cache"},{name:"Fine-tuning",key:"fine-tuning"},{name:"Cloud Deployment",key:"cloud-deployment"},{name:"GitHub Automation",key:"github-automation"}],n=await Promise.all(t.map(async i=>`${await d.licenseManager.checkFeature(i.key)?"\u2713":"\u2717"} ${i.name}`));d.logger.section("Feature Availability",n),d.logger.newline(),d.logger.section("Quick Start",["Generate an MCP server:"," ai-toolkit generate mcp github","","Generate a Claude command:"," ai-toolkit generate command search-kb","","View all commands:"," ai-toolkit --help"])}catch{d.logger.error("Failed to load license information"),d.logger.newline(),d.logger.info("All features are available - no license required!"),d.logger.info('Run "ai-toolkit --help" to get started')}}function me(e){let t=new Date(e),n=new Date;if(t<n)return"Expired";let i=Math.ceil((t.getTime()-n.getTime())/(1e3*60*60*24));return i<=30?`Active (expires in ${i} days)`:"Active"}var S=new te.Command;S.name("neural-tools").description("Neural Tools - Build MCPs, Claude commands, skills, plugins, and AI workflows").version("0.1.0");var A=S.command("generate").alias("g").description("Generate new components (MCP, command, agent, skill, plugin, etc.)");A.command("mcp").description("Generate a new MCP server").argument("<name>","Name of the MCP server").option("-d, --description <desc>","Description of the MCP").option("-o, --output <dir>","Output directory","./apps").option("--fastmcp","Use FastMCP template",!0).option("--cicd <provider>","CI/CD provider (github, harness, none)","github").option("--deployment <platform>","Deployment platform (aws, gcp, none)","aws").option("--dry-run","Preview without creating files",!1).action(N);A.command("command").description("Generate a new Claude command").argument("<name>","Name of the command (without /)").option("-d, --description <desc>","Description of the command").option("-o, --output <dir>","Output directory","./claude/commands").option("--args <arguments...>","Command arguments").option("--tools <tools...>","Allowed tools").option("--global","Install globally to ~/.claude/commands",!1).option("--dry-run","Preview without creating files",!1).action(q);A.command("agent").description("Generate a new Claude agent").argument("<name>","Name of the agent").option("-d, --description <desc>","Description of the agent").option("-o, --output <dir>","Output directory","./claude/agents").option("--model <model>","Model to use (sonnet, opus, haiku)","sonnet").option("--tools <tools...>","Available tools").option("--global","Install globally to ~/.claude/agents",!1).option("--dry-run","Preview without creating files",!1).action(W);A.command("skill").description("Generate a new Claude skill").argument("<name>","Name of the skill").option("-d, --description <desc>","Description of the skill").option("-o, --output <dir>","Output directory","./claude/skills").option("--plugin <dir>","Write skill into a plugin directory (creates <dir>/skills/<name>)").option("--references","Create a references folder scaffold",!1).option("--global","Install globally to ~/.claude/skills",!1).option("--dry-run","Preview without creating files",!1).action(B);A.command("plugin").description("Generate a new Claude plugin").argument("<name>","Name of the plugin").option("-d, --description <desc>","Description of the plugin").option("-o, --output <dir>","Output directory","./claude/plugins").option("--version <version>","Plugin version","0.1.0").option("--author <author>","Plugin author").option("--with-skill <name>","Create a starter skill inside the plugin").option("--dry-run","Preview without creating files",!1).action(z);S.command("deploy").description("Deploy an MCP server").argument("<name>","Name of the MCP to deploy").option("-p, --platform <platform>","Deployment platform (aws, gcp)","aws").option("--region <region>","AWS/GCP region").option("--env <env>","Environment (dev, staging, prod)","dev").action(Q);S.command("login").description("Authenticate and manage your license").option("--key <key>","License key").action(Z);S.command("status").description("Show license status and available features").action(ee);S.exitOverride();try{S.parse(process.argv)}catch(e){e.code!=="commander.help"&&e.code!=="commander.version"&&(ie.logger.error(e.message||"An unexpected error occurred"),process.exit(1))}
package/dist/cli.mjs CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
- import{Command as X}from"commander";import{logger as Z}from"@neural-tools/core";import u from"path";import c from"fs-extra";import{logger as p,requireFeature as L}from"@neural-tools/core";import E from"inquirer";async function A(e,t){p.header(`Generating MCP: ${e}`),t.deployment!=="none"&&await L("cloud-deployment","Cloud Deployment");let o=t.description;o||(o=(await E.prompt([{type:"input",name:"description",message:"Description of your MCP:",default:`${e} MCP server`}])).description);let n=u.resolve(t.output||"./apps",e);if(t.dryRun){p.info("Dry run mode - no files will be created"),p.section("Configuration",[`Name: ${e}`,`Description: ${o}`,`Output: ${n}`,`Template: ${t.fastmcp?"FastMCP":"Standard"}`,`CI/CD: ${t.cicd}`,`Deployment: ${t.deployment}`]);return}if(await c.pathExists(n)){let{overwrite:r}=await E.prompt([{type:"confirm",name:"overwrite",message:`Directory ${n} already exists. Overwrite?`,default:!1}]);if(!r){p.warn("Cancelled");return}await c.remove(n)}p.startSpinner("Creating MCP structure...");try{await c.ensureDir(n);let r=`[project]
2
+ import{Command as ue}from"commander";import{logger as pe}from"@neural-tools/core";import d from"path";import u from"fs-extra";import{logger as m,requireFeature as H}from"@neural-tools/core";import j from"inquirer";async function I(e,t){m.header(`Generating MCP: ${e}`),t.deployment!=="none"&&await H("cloud-deployment","Cloud Deployment");let n=t.description;n||(n=(await j.prompt([{type:"input",name:"description",message:"Description of your MCP:",default:`${e} MCP server`}])).description);let i=d.resolve(t.output||"./apps",e);if(t.dryRun){m.info("Dry run mode - no files will be created"),m.section("Configuration",[`Name: ${e}`,`Description: ${n}`,`Output: ${i}`,`Template: ${t.fastmcp?"FastMCP":"Standard"}`,`CI/CD: ${t.cicd}`,`Deployment: ${t.deployment}`]);return}if(await u.pathExists(i)){let{overwrite:r}=await j.prompt([{type:"confirm",name:"overwrite",message:`Directory ${i} already exists. Overwrite?`,default:!1}]);if(!r){m.warn("Cancelled");return}await u.remove(i)}m.startSpinner("Creating MCP structure...");try{await u.ensureDir(i);let r=`[project]
3
3
  name = "mcp-${e}"
4
4
  version = "0.1.0"
5
- description = "${o}"
5
+ description = "${n}"
6
6
  requires-python = ">=3.10"
7
7
  dependencies = [
8
8
  "fastmcp>=2.2.0",
@@ -24,10 +24,10 @@ line-length = 100
24
24
 
25
25
  [tool.ruff]
26
26
  line-length = 100
27
- `;await c.writeFile(u.join(n,"pyproject.toml"),r,"utf-8");let i=`"""
27
+ `;await u.writeFile(d.join(i,"pyproject.toml"),r,"utf-8");let o=`"""
28
28
  ${e} MCP Server
29
29
 
30
- ${o}
30
+ ${n}
31
31
  """
32
32
  from fastmcp import FastMCP
33
33
 
@@ -83,9 +83,9 @@ def brainstorm_topic(topic: str) -> str:
83
83
 
84
84
  if __name__ == "__main__":
85
85
  mcp.run()
86
- `;await c.writeFile(u.join(n,"server.py"),i,"utf-8");let a=`# ${e} MCP Server
86
+ `;await u.writeFile(d.join(i,"server.py"),o,"utf-8");let s=`# ${e} MCP Server
87
87
 
88
- ${o}
88
+ ${n}
89
89
 
90
90
  ## Quick Start with Docker
91
91
 
@@ -190,7 +190,7 @@ ruff check .
190
190
  ## License
191
191
 
192
192
  MIT
193
- `;await c.writeFile(u.join(n,"README.md"),a,"utf-8"),await c.writeFile(u.join(n,"Dockerfile"),`FROM python:3.11-slim
193
+ `;await u.writeFile(d.join(i,"README.md"),s,"utf-8"),await u.writeFile(d.join(i,"Dockerfile"),`FROM python:3.11-slim
194
194
 
195
195
  WORKDIR /app
196
196
 
@@ -206,7 +206,7 @@ RUN uv pip install --system --no-cache .
206
206
 
207
207
  # Run the MCP server
208
208
  CMD ["python", "server.py"]
209
- `,"utf-8");let y=`version: '3.8'
209
+ `,"utf-8");let c=`version: '3.8'
210
210
 
211
211
  services:
212
212
  mcp:
@@ -219,7 +219,7 @@ services:
219
219
  - .:/app
220
220
  environment:
221
221
  - PYTHONUNBUFFERED=1
222
- `;if(await c.writeFile(u.join(n,"docker-compose.yml"),y,"utf-8"),await c.writeFile(u.join(n,".dockerignore"),`__pycache__
222
+ `;if(await u.writeFile(d.join(i,"docker-compose.yml"),c,"utf-8"),await u.writeFile(d.join(i,".dockerignore"),`__pycache__
223
223
  *.pyc
224
224
  *.pyo
225
225
  *.pyd
@@ -236,7 +236,7 @@ venv
236
236
  .git
237
237
  .github
238
238
  README.md
239
- `,"utf-8"),t.cicd==="github"){await c.ensureDir(u.join(n,".github","workflows"));let h=`name: Deploy MCP
239
+ `,"utf-8"),t.cicd==="github"){await u.ensureDir(d.join(i,".github","workflows"));let C=`name: Deploy MCP
240
240
 
241
241
  on:
242
242
  push:
@@ -320,22 +320,22 @@ jobs:
320
320
  run: |
321
321
  gcloud builds submit --tag gcr.io/\${{ secrets.GCP_PROJECT_ID }}/mcp-${e}:latest
322
322
  `:""}
323
- `;await c.writeFile(u.join(n,".github","workflows","deploy.yml"),h,"utf-8")}p.succeedSpinner("MCP created successfully!"),p.section("Next steps",[`1. cd ${n}`,"2. docker-compose up # Start with Docker","","Or for local development:","2. uv pip install -e .","3. python server.py","","Or use MCP Inspector:","2. uv pip install -e .","3. fastmcp dev server.py","","Add to Claude Code settings to use this MCP"]),p.success(`\u2728 MCP "${e}" ready to use!`)}catch(r){throw p.failSpinner("Failed to create MCP"),r}}import b from"path";import N from"os";import P from"fs-extra";import{logger as d}from"@neural-tools/core";import M from"inquirer";async function _(e,t){d.header(`Generating Claude Command: /${e}`);let o=t.description;o||(o=(await M.prompt([{type:"input",name:"description",message:"Description of your command:",default:`Execute ${e}`}])).description);let n;t.global?n=b.join(N.homedir(),".claude","commands"):n=b.resolve(t.output||"./claude/commands");let r=b.join(n,`${e}.md`);if(t.dryRun){d.info("Dry run mode - no files will be created"),d.section("Configuration",[`Name: /${e}`,`Description: ${o}`,`Output: ${r}`,`Arguments: ${t.args?.join(", ")||"none"}`,`Allowed Tools: ${t.tools?.join(", ")||"all"}`,`Global: ${t.global?"Yes":"No"}`]);return}if(await P.pathExists(r)){let{overwrite:i}=await M.prompt([{type:"confirm",name:"overwrite",message:`Command /${e} already exists. Overwrite?`,default:!1}]);if(!i){d.warn("Cancelled");return}}d.startSpinner("Creating Claude command...");try{await P.ensureDir(n);let i=["---"];t.args&&t.args.length>0&&i.push(`argument-hint: ${t.args.join(" ")}`),i.push(`description: ${o}`),t.tools&&t.tools.length>0&&(i.push("allowed-tools:"),t.tools.forEach(h=>{i.push(` - ${h}`)})),i.push("---"),i.push("");let a=t.args||[],v=a.map((h,$)=>`$${$+1}`).join(" "),y=a.length>0?`
323
+ `;await u.writeFile(d.join(i,".github","workflows","deploy.yml"),C,"utf-8")}m.succeedSpinner("MCP created successfully!"),m.section("Next steps",[`1. cd ${i}`,"2. docker-compose up # Start with Docker","","Or for local development:","2. uv pip install -e .","3. python server.py","","Or use MCP Inspector:","2. uv pip install -e .","3. fastmcp dev server.py","","Add to Claude Code settings to use this MCP"]),m.success(`\u2728 MCP "${e}" ready to use!`)}catch(r){throw m.failSpinner("Failed to create MCP"),r}}import O from"path";import J from"os";import G from"fs-extra";import{logger as g}from"@neural-tools/core";import F from"inquirer";async function T(e,t){g.header(`Generating Claude Command: /${e}`);let n=t.description;n||(n=(await F.prompt([{type:"input",name:"description",message:"Description of your command:",default:`Execute ${e}`}])).description);let i;t.global?i=O.join(J.homedir(),".claude","commands"):i=O.resolve(t.output||"./claude/commands");let r=O.join(i,`${e}.md`);if(t.dryRun){g.info("Dry run mode - no files will be created"),g.section("Configuration",[`Name: /${e}`,`Description: ${n}`,`Output: ${r}`,`Arguments: ${t.args?.join(", ")||"none"}`,`Allowed Tools: ${t.tools?.join(", ")||"all"}`,`Global: ${t.global?"Yes":"No"}`]);return}if(await G.pathExists(r)){let{overwrite:o}=await F.prompt([{type:"confirm",name:"overwrite",message:`Command /${e} already exists. Overwrite?`,default:!1}]);if(!o){g.warn("Cancelled");return}}g.startSpinner("Creating Claude command...");try{await G.ensureDir(i);let o=["---"];t.args&&t.args.length>0&&o.push(`argument-hint: ${t.args.join(" ")}`),o.push(`description: ${n}`),t.tools&&t.tools.length>0&&(o.push("allowed-tools:"),t.tools.forEach(C=>{o.push(` - ${C}`)})),o.push("---"),o.push("");let s=t.args||[],l=s.map((C,R)=>`$${R+1}`).join(" "),c=s.length>0?`
324
324
 
325
325
  Arguments:
326
- ${a.map((h,$)=>`- $${$+1}: ${h}`).join(`
327
- `)}`:"",R=`${i.join(`
326
+ ${s.map((C,R)=>`- $${R+1}: ${C}`).join(`
327
+ `)}`:"",D=`${o.join(`
328
328
  `)}# ${e} Command
329
329
 
330
- Execute the ${e} operation${y?":"+y:"."}
330
+ Execute the ${e} operation${c?":"+c:"."}
331
331
 
332
- ${v?`Using arguments: ${v}`:""}
332
+ ${l?`Using arguments: ${l}`:""}
333
333
 
334
334
  Please proceed with the ${e} operation.
335
- `;await P.writeFile(r,R,"utf-8"),d.succeedSpinner("Claude command created successfully!"),d.section("Next steps",[t.global?`Command /${e} is now available globally in Claude Code`:`Add the command to your project by copying ${r}`,"","Usage:",a.length>0?` /${e} ${a.join(" ")}`:` /${e}`]),d.success(`\u2728 Command "/${e}" ready to use!`)}catch(i){throw d.failSpinner("Failed to create command"),i}}import k from"path";import Y from"os";import D from"fs-extra";import{logger as m}from"@neural-tools/core";import G from"inquirer";async function O(e,t){m.header(`Generating Claude Agent: ${e}`);let o=t.description;o||(o=(await G.prompt([{type:"input",name:"description",message:"Description of your agent:",default:`${e} specialized agent`}])).description);let n;t.global?n=k.join(Y.homedir(),".claude","agents"):n=k.resolve(t.output||"./claude/agents");let r=k.join(n,`${e}.md`),i=t.model||"sonnet";if(t.dryRun){m.info("Dry run mode - no files will be created"),m.section("Configuration",[`Name: ${e}`,`Description: ${o}`,`Output: ${r}`,`Model: ${i}`,`Tools: ${t.tools?.join(", ")||"all"}`,`Global: ${t.global?"Yes":"No"}`]);return}if(await D.pathExists(r)){let{overwrite:a}=await G.prompt([{type:"confirm",name:"overwrite",message:`Agent ${e} already exists. Overwrite?`,default:!1}]);if(!a){m.warn("Cancelled");return}}m.startSpinner("Creating Claude agent...");try{await D.ensureDir(n);let a=["---"];a.push(`model: claude-${i}-4-5`),t.tools&&t.tools.length>0&&(a.push("tools:"),t.tools.forEach(y=>{a.push(` - ${y}`)})),a.push("---"),a.push("");let v=`${a.join(`
335
+ `;await G.writeFile(r,D,"utf-8"),g.succeedSpinner("Claude command created successfully!"),g.section("Next steps",[t.global?`Command /${e} is now available globally in Claude Code`:`Add the command to your project by copying ${r}`,"","Usage:",s.length>0?` /${e} ${s.join(" ")}`:` /${e}`]),g.success(`\u2728 Command "/${e}" ready to use!`)}catch(o){throw g.failSpinner("Failed to create command"),o}}import M from"path";import Q from"os";import _ from"fs-extra";import{logger as f}from"@neural-tools/core";import x from"inquirer";async function L(e,t){f.header(`Generating Claude Agent: ${e}`);let n=t.description;n||(n=(await x.prompt([{type:"input",name:"description",message:"Description of your agent:",default:`${e} specialized agent`}])).description);let i;t.global?i=M.join(Q.homedir(),".claude","agents"):i=M.resolve(t.output||"./claude/agents");let r=M.join(i,`${e}.md`),o=t.model||"sonnet";if(t.dryRun){f.info("Dry run mode - no files will be created"),f.section("Configuration",[`Name: ${e}`,`Description: ${n}`,`Output: ${r}`,`Model: ${o}`,`Tools: ${t.tools?.join(", ")||"all"}`,`Global: ${t.global?"Yes":"No"}`]);return}if(await _.pathExists(r)){let{overwrite:s}=await x.prompt([{type:"confirm",name:"overwrite",message:`Agent ${e} already exists. Overwrite?`,default:!1}]);if(!s){f.warn("Cancelled");return}}f.startSpinner("Creating Claude agent...");try{await _.ensureDir(i);let s=["---"];s.push(`model: claude-${o}-4-5`),t.tools&&t.tools.length>0&&(s.push("tools:"),t.tools.forEach(c=>{s.push(` - ${c}`)})),s.push("---"),s.push("");let l=`${s.join(`
336
336
  `)}# ${e} Agent
337
337
 
338
- ${o}
338
+ ${n}
339
339
 
340
340
  ## Role
341
341
 
@@ -361,4 +361,33 @@ Provide clear, structured responses that:
361
361
  - [Output requirement 3]
362
362
 
363
363
  Focus on ${e} and deliver actionable results.
364
- `;await D.writeFile(r,v,"utf-8"),m.succeedSpinner("Claude agent created successfully!"),m.section("Next steps",[t.global?`Agent ${e} is now available globally in Claude Code`:`Add the agent to your project by copying ${r}`,"","Customize the agent by editing:",` ${r}`,"","Use the agent via the Task tool in Claude Code"]),m.success(`\u2728 Agent "${e}" ready to use!`)}catch(a){throw m.failSpinner("Failed to create agent"),a}}import{logger as s,requireFeature as q}from"@neural-tools/core";import{execa as U}from"execa";import W from"path";import K from"fs-extra";async function T(e,t){s.header(`Deploying MCP: ${e}`),await q("cloud-deployment","Cloud Deployment");let o=t.platform||"aws",n=t.env||"dev";s.info(`Platform: ${o}`),s.info(`Environment: ${n}`);let r=W.resolve("./apps",e);if(!await K.pathExists(r))throw new Error(`MCP "${e}" not found at ${r}`);s.startSpinner("Building MCP...");try{await U("npm",["run","build"],{cwd:r,stdio:"pipe"}),s.succeedSpinner("MCP built successfully"),o==="aws"?await B(e,r,t):o==="gcp"&&await z(e,r,t),s.success(`\u2728 MCP "${e}" deployed successfully!`)}catch(i){throw s.failSpinner("Deployment failed"),i}}async function B(e,t,o){s.startSpinner("Deploying to AWS Lambda..."),s.updateSpinner("Packaging Lambda function..."),await new Promise(n=>setTimeout(n,1e3)),s.updateSpinner("Uploading to S3..."),await new Promise(n=>setTimeout(n,1e3)),s.updateSpinner("Creating/updating Lambda function..."),await new Promise(n=>setTimeout(n,1e3)),s.succeedSpinner("Deployed to AWS Lambda"),s.section("Deployment Info",[`Function: ${e}-${o.env}`,`Region: ${o.region||"us-east-1"}`,`Environment: ${o.env}`,"","Configure in Claude Code:",JSON.stringify({mcpServers:{[e]:{command:"aws",args:["lambda","invoke","--function-name",`${e}-${o.env}`,"--payload","stdin","--output","stdout"]}}},null,2)])}async function z(e,t,o){s.startSpinner("Deploying to Google Cloud Functions..."),s.updateSpinner("Packaging function..."),await new Promise(n=>setTimeout(n,1e3)),s.updateSpinner("Uploading to Cloud Storage..."),await new Promise(n=>setTimeout(n,1e3)),s.updateSpinner("Deploying Cloud Function..."),await new Promise(n=>setTimeout(n,1e3)),s.succeedSpinner("Deployed to Google Cloud Functions"),s.section("Deployment Info",[`Function: ${e}-${o.env}`,`Region: ${o.region||"us-central1"}`,`Environment: ${o.env}`])}import{logger as l,licenseManager as I,LicenseTier as V}from"@neural-tools/core";import H from"inquirer";async function F(e){l.header("AI Toolkit License Management");let t=e.key;if(t||(t=(await H.prompt([{type:"input",name:"licenseKey",message:"Enter your license key:",validate:n=>!n||n.trim().length===0?"License key is required":!0}])).licenseKey),!t){l.error("License key is required");return}l.startSpinner("Validating license...");try{let o=t.split("-");if(o.length<2)throw new Error("Invalid license key format");let n=o[0],r=o[1];if(!Object.values(V).includes(n))throw new Error("Invalid license tier");await I.saveLicense({tier:n,email:r,key:t,features:[]}),l.succeedSpinner("License activated successfully!");let i=await I.loadLicense();l.section("License Details",[`Tier: ${i.tier.toUpperCase()}`,`Email: ${i.email||"N/A"}`,"Status: Active"]);let a=J();l.section("Available Features",a),l.success("\u2728 Ready to build!")}catch(o){l.failSpinner("License validation failed"),l.error(o.message||"Invalid license key"),l.newline(),l.info("All features are available for free - no license required!")}}function J(){return["\u2713 MCP generation","\u2713 Claude commands","\u2713 Claude agents","\u2713 Vector database integration","\u2713 Semantic caching","\u2713 Fine-tuning workflows","\u2713 Cloud deployment (AWS/GCP)","\u2713 GitHub automation","\u2713 All templates"]}import{logger as g,licenseManager as j}from"@neural-tools/core";async function x(){g.header("AI Toolkit Status");try{let e=await j.loadLicense();g.section("License Information",[`Tier: ${e.tier.toUpperCase()}`,`Email: ${e.email||"N/A"}`,`Status: ${e.expiresAt?Q(e.expiresAt):"Active"}`]);let t=[{name:"MCP Generation",key:"mcp-generation"},{name:"Claude Commands",key:"claude-commands"},{name:"Vector Database",key:"vector-db"},{name:"Semantic Cache",key:"semantic-cache"},{name:"Fine-tuning",key:"fine-tuning"},{name:"Cloud Deployment",key:"cloud-deployment"},{name:"GitHub Automation",key:"github-automation"}],o=await Promise.all(t.map(async n=>`${await j.checkFeature(n.key)?"\u2713":"\u2717"} ${n.name}`));g.section("Feature Availability",o),g.newline(),g.section("Quick Start",["Generate an MCP server:"," ai-toolkit generate mcp github","","Generate a Claude command:"," ai-toolkit generate command search-kb","","View all commands:"," ai-toolkit --help"])}catch{g.error("Failed to load license information"),g.newline(),g.info("All features are available - no license required!"),g.info('Run "ai-toolkit --help" to get started')}}function Q(e){let t=new Date(e),o=new Date;if(t<o)return"Expired";let n=Math.ceil((t.getTime()-o.getTime())/(1e3*60*60*24));return n<=30?`Active (expires in ${n} days)`:"Active"}var f=new X;f.name("neural-tools").description("Neural Tools - Build MCPs, Claude commands, and AI workflows").version("0.1.0");var S=f.command("generate").alias("g").description("Generate new components (MCP, command, agent, etc.)");S.command("mcp").description("Generate a new MCP server").argument("<name>","Name of the MCP server").option("-d, --description <desc>","Description of the MCP").option("-o, --output <dir>","Output directory","./apps").option("--fastmcp","Use FastMCP template",!0).option("--cicd <provider>","CI/CD provider (github, harness, none)","github").option("--deployment <platform>","Deployment platform (aws, gcp, none)","aws").option("--dry-run","Preview without creating files",!1).action(A);S.command("command").description("Generate a new Claude command").argument("<name>","Name of the command (without /)").option("-d, --description <desc>","Description of the command").option("-o, --output <dir>","Output directory","./claude/commands").option("--args <arguments...>","Command arguments").option("--tools <tools...>","Allowed tools").option("--global","Install globally to ~/.claude/commands",!1).option("--dry-run","Preview without creating files",!1).action(_);S.command("agent").description("Generate a new Claude agent").argument("<name>","Name of the agent").option("-d, --description <desc>","Description of the agent").option("-o, --output <dir>","Output directory","./claude/agents").option("--model <model>","Model to use (sonnet, opus, haiku)","sonnet").option("--tools <tools...>","Available tools").option("--global","Install globally to ~/.claude/agents",!1).option("--dry-run","Preview without creating files",!1).action(O);f.command("deploy").description("Deploy an MCP server").argument("<name>","Name of the MCP to deploy").option("-p, --platform <platform>","Deployment platform (aws, gcp)","aws").option("--region <region>","AWS/GCP region").option("--env <env>","Environment (dev, staging, prod)","dev").action(T);f.command("login").description("Authenticate and manage your license").option("--key <key>","License key").action(F);f.command("status").description("Show license status and available features").action(x);f.exitOverride();try{f.parse(process.argv)}catch(e){e.code!=="commander.help"&&e.code!=="commander.version"&&(Z.error(e.message||"An unexpected error occurred"),process.exit(1))}
364
+ `;await _.writeFile(r,l,"utf-8"),f.succeedSpinner("Claude agent created successfully!"),f.section("Next steps",[t.global?`Agent ${e} is now available globally in Claude Code`:`Add the agent to your project by copying ${r}`,"","Customize the agent by editing:",` ${r}`,"","Use the agent via the Task tool in Claude Code"]),f.success(`\u2728 Agent "${e}" ready to use!`)}catch(s){throw f.failSpinner("Failed to create agent"),s}}import k from"path";import X from"os";import E from"fs-extra";import N from"inquirer";import{logger as y}from"@neural-tools/core";async function Y(e,t){y.header(`Generating Claude Skill: ${e}`);let n=t.description;n||(n=(await N.prompt([{type:"input",name:"description",message:"Description of your skill:",default:`${e} skill for Claude Code`}])).description);let i=Z(t),r=k.join(i,e),o=k.join(r,"SKILL.md"),s=k.join(r,"references");if(t.dryRun){y.info("Dry run mode - no files will be created"),y.section("Configuration",[`Name: ${e}`,`Description: ${n}`,`Output: ${o}`,`Plugin: ${t.plugin||"none"}`,`References: ${t.references?"Yes":"No"}`,`Global: ${t.global?"Yes":"No"}`]);return}if(await E.pathExists(o)){let{overwrite:l}=await N.prompt([{type:"confirm",name:"overwrite",message:`Skill ${e} already exists. Overwrite?`,default:!1}]);if(!l){y.warn("Cancelled");return}}y.startSpinner("Creating Claude skill...");try{await E.ensureDir(r),t.references&&await E.ensureDir(s);let l=`---
365
+ name: ${e}
366
+ description: ${n}
367
+ ---
368
+
369
+ # ${e}
370
+
371
+ ${n}
372
+
373
+ ## When to use this skill
374
+
375
+ Use this skill when the request matches ${e} workflows.
376
+
377
+ ## Workflow
378
+
379
+ 1. Gather the relevant project context.
380
+ 2. Apply ${e} specific checks and implementation steps.
381
+ 3. Return concrete output and next actions.
382
+ `;if(await E.writeFile(o,l,"utf-8"),t.references){let c=`# References
383
+
384
+ Store focused reference material for the ${e} skill in this folder.
385
+ `;await E.writeFile(k.join(s,"README.md"),c,"utf-8")}y.succeedSpinner("Claude skill created successfully!"),y.section("Next steps",[`Edit the skill definition: ${o}`,t.references?`Add reference docs in: ${s}`:"Use --references to scaffold a references folder"]),y.success(`\u2728 Skill "${e}" ready to use!`)}catch(l){throw y.failSpinner("Failed to create skill"),l}}function Z(e){return e.plugin?k.resolve(e.plugin,"skills"):e.global?k.join(X.homedir(),".claude","skills"):k.resolve(e.output||"./claude/skills")}import b from"path";import S from"fs-extra";import q from"inquirer";import{logger as h}from"@neural-tools/core";async function U(e,t){h.header(`Generating Claude Plugin: ${e}`);let n=t.description;n||(n=(await q.prompt([{type:"input",name:"description",message:"Description of your plugin:",default:`${e} Claude Code plugin`}])).description);let i=n||`${e} Claude Code plugin`,r=b.resolve(t.output||"./claude/plugins",e),o=b.join(r,".claude-plugin"),s=b.join(o,"plugin.json"),l=b.join(r,"skills");if(t.dryRun){h.info("Dry run mode - no files will be created"),h.section("Configuration",[`Name: ${e}`,`Description: ${i}`,`Output: ${r}`,`Plugin config: ${s}`,`Version: ${t.version||"0.1.0"}`,`Author: ${t.author||"none"}`,`Starter skill: ${t.withSkill||"none"}`]);return}if(await S.pathExists(s)){let{overwrite:c}=await q.prompt([{type:"confirm",name:"overwrite",message:`Plugin ${e} already exists. Overwrite config?`,default:!1}]);if(!c){h.warn("Cancelled");return}}h.startSpinner("Creating Claude plugin...");try{await S.ensureDir(o),await S.ensureDir(l);let c={name:e,version:t.version||"0.1.0",description:i};if(t.author&&(c.author=t.author),await S.writeJSON(s,c,{spaces:2}),t.withSkill){let D=b.join(l,t.withSkill),C=b.join(D,"SKILL.md");await S.ensureDir(D);let R=`---
386
+ name: ${t.withSkill}
387
+ description: Starter skill for ${e}
388
+ ---
389
+
390
+ # ${t.withSkill}
391
+
392
+ Starter skill scaffolded with the plugin.
393
+ `;await S.writeFile(C,R,"utf-8")}h.succeedSpinner("Claude plugin created successfully!"),h.section("Next steps",[`Review plugin manifest: ${s}`,t.withSkill?`Customize skill: ${b.join(l,t.withSkill,"SKILL.md")}`:"Use `generate skill <name> --plugin <plugin-dir>` to add skills",`Install with Claude Code using the plugin path: ${r}`]),h.success(`\u2728 Plugin "${e}" ready to use!`)}catch(c){throw h.failSpinner("Failed to create plugin"),c}}import{logger as a,requireFeature as ee}from"@neural-tools/core";import{execa as te}from"execa";import ie from"path";import ne from"fs-extra";async function W(e,t){a.header(`Deploying MCP: ${e}`),await ee("cloud-deployment","Cloud Deployment");let n=t.platform||"aws",i=t.env||"dev";a.info(`Platform: ${n}`),a.info(`Environment: ${i}`);let r=ie.resolve("./apps",e);if(!await ne.pathExists(r))throw new Error(`MCP "${e}" not found at ${r}`);a.startSpinner("Building MCP...");try{await te("npm",["run","build"],{cwd:r,stdio:"pipe"}),a.succeedSpinner("MCP built successfully"),n==="aws"?await re(e,r,t):n==="gcp"&&await oe(e,r,t),a.success(`\u2728 MCP "${e}" deployed successfully!`)}catch(o){throw a.failSpinner("Deployment failed"),o}}async function re(e,t,n){a.startSpinner("Deploying to AWS Lambda..."),a.updateSpinner("Packaging Lambda function..."),await new Promise(i=>setTimeout(i,1e3)),a.updateSpinner("Uploading to S3..."),await new Promise(i=>setTimeout(i,1e3)),a.updateSpinner("Creating/updating Lambda function..."),await new Promise(i=>setTimeout(i,1e3)),a.succeedSpinner("Deployed to AWS Lambda"),a.section("Deployment Info",[`Function: ${e}-${n.env}`,`Region: ${n.region||"us-east-1"}`,`Environment: ${n.env}`,"","Configure in Claude Code:",JSON.stringify({mcpServers:{[e]:{command:"aws",args:["lambda","invoke","--function-name",`${e}-${n.env}`,"--payload","stdin","--output","stdout"]}}},null,2)])}async function oe(e,t,n){a.startSpinner("Deploying to Google Cloud Functions..."),a.updateSpinner("Packaging function..."),await new Promise(i=>setTimeout(i,1e3)),a.updateSpinner("Uploading to Cloud Storage..."),await new Promise(i=>setTimeout(i,1e3)),a.updateSpinner("Deploying Cloud Function..."),await new Promise(i=>setTimeout(i,1e3)),a.succeedSpinner("Deployed to Google Cloud Functions"),a.section("Deployment Info",[`Function: ${e}-${n.env}`,`Region: ${n.region||"us-central1"}`,`Environment: ${n.env}`])}import{logger as p,licenseManager as K,LicenseTier as se}from"@neural-tools/core";import ae from"inquirer";async function B(e){p.header("AI Toolkit License Management");let t=e.key;if(t||(t=(await ae.prompt([{type:"input",name:"licenseKey",message:"Enter your license key:",validate:i=>!i||i.trim().length===0?"License key is required":!0}])).licenseKey),!t){p.error("License key is required");return}p.startSpinner("Validating license...");try{let n=t.split("-");if(n.length<2)throw new Error("Invalid license key format");let i=n[0],r=n[1];if(!Object.values(se).includes(i))throw new Error("Invalid license tier");await K.saveLicense({tier:i,email:r,key:t,features:[]}),p.succeedSpinner("License activated successfully!");let o=await K.loadLicense();p.section("License Details",[`Tier: ${o.tier.toUpperCase()}`,`Email: ${o.email||"N/A"}`,"Status: Active"]);let s=le();p.section("Available Features",s),p.success("\u2728 Ready to build!")}catch(n){p.failSpinner("License validation failed"),p.error(n.message||"Invalid license key"),p.newline(),p.info("All features are available for free - no license required!")}}function le(){return["\u2713 MCP generation","\u2713 Claude commands","\u2713 Claude agents","\u2713 Vector database integration","\u2713 Semantic caching","\u2713 Fine-tuning workflows","\u2713 Cloud deployment (AWS/GCP)","\u2713 GitHub automation","\u2713 All templates"]}import{logger as w,licenseManager as z}from"@neural-tools/core";async function V(){w.header("AI Toolkit Status");try{let e=await z.loadLicense();w.section("License Information",[`Tier: ${e.tier.toUpperCase()}`,`Email: ${e.email||"N/A"}`,`Status: ${e.expiresAt?ce(e.expiresAt):"Active"}`]);let t=[{name:"MCP Generation",key:"mcp-generation"},{name:"Claude Commands",key:"claude-commands"},{name:"Vector Database",key:"vector-db"},{name:"Semantic Cache",key:"semantic-cache"},{name:"Fine-tuning",key:"fine-tuning"},{name:"Cloud Deployment",key:"cloud-deployment"},{name:"GitHub Automation",key:"github-automation"}],n=await Promise.all(t.map(async i=>`${await z.checkFeature(i.key)?"\u2713":"\u2717"} ${i.name}`));w.section("Feature Availability",n),w.newline(),w.section("Quick Start",["Generate an MCP server:"," ai-toolkit generate mcp github","","Generate a Claude command:"," ai-toolkit generate command search-kb","","View all commands:"," ai-toolkit --help"])}catch{w.error("Failed to load license information"),w.newline(),w.info("All features are available - no license required!"),w.info('Run "ai-toolkit --help" to get started')}}function ce(e){let t=new Date(e),n=new Date;if(t<n)return"Expired";let i=Math.ceil((t.getTime()-n.getTime())/(1e3*60*60*24));return i<=30?`Active (expires in ${i} days)`:"Active"}var P=new ue;P.name("neural-tools").description("Neural Tools - Build MCPs, Claude commands, skills, plugins, and AI workflows").version("0.1.0");var A=P.command("generate").alias("g").description("Generate new components (MCP, command, agent, skill, plugin, etc.)");A.command("mcp").description("Generate a new MCP server").argument("<name>","Name of the MCP server").option("-d, --description <desc>","Description of the MCP").option("-o, --output <dir>","Output directory","./apps").option("--fastmcp","Use FastMCP template",!0).option("--cicd <provider>","CI/CD provider (github, harness, none)","github").option("--deployment <platform>","Deployment platform (aws, gcp, none)","aws").option("--dry-run","Preview without creating files",!1).action(I);A.command("command").description("Generate a new Claude command").argument("<name>","Name of the command (without /)").option("-d, --description <desc>","Description of the command").option("-o, --output <dir>","Output directory","./claude/commands").option("--args <arguments...>","Command arguments").option("--tools <tools...>","Allowed tools").option("--global","Install globally to ~/.claude/commands",!1).option("--dry-run","Preview without creating files",!1).action(T);A.command("agent").description("Generate a new Claude agent").argument("<name>","Name of the agent").option("-d, --description <desc>","Description of the agent").option("-o, --output <dir>","Output directory","./claude/agents").option("--model <model>","Model to use (sonnet, opus, haiku)","sonnet").option("--tools <tools...>","Available tools").option("--global","Install globally to ~/.claude/agents",!1).option("--dry-run","Preview without creating files",!1).action(L);A.command("skill").description("Generate a new Claude skill").argument("<name>","Name of the skill").option("-d, --description <desc>","Description of the skill").option("-o, --output <dir>","Output directory","./claude/skills").option("--plugin <dir>","Write skill into a plugin directory (creates <dir>/skills/<name>)").option("--references","Create a references folder scaffold",!1).option("--global","Install globally to ~/.claude/skills",!1).option("--dry-run","Preview without creating files",!1).action(Y);A.command("plugin").description("Generate a new Claude plugin").argument("<name>","Name of the plugin").option("-d, --description <desc>","Description of the plugin").option("-o, --output <dir>","Output directory","./claude/plugins").option("--version <version>","Plugin version","0.1.0").option("--author <author>","Plugin author").option("--with-skill <name>","Create a starter skill inside the plugin").option("--dry-run","Preview without creating files",!1).action(U);P.command("deploy").description("Deploy an MCP server").argument("<name>","Name of the MCP to deploy").option("-p, --platform <platform>","Deployment platform (aws, gcp)","aws").option("--region <region>","AWS/GCP region").option("--env <env>","Environment (dev, staging, prod)","dev").action(W);P.command("login").description("Authenticate and manage your license").option("--key <key>","License key").action(B);P.command("status").description("Show license status and available features").action(V);P.exitOverride();try{P.parse(process.argv)}catch(e){e.code!=="commander.help"&&e.code!=="commander.version"&&(pe.error(e.message||"An unexpected error occurred"),process.exit(1))}
package/dist/index.d.mts CHANGED
@@ -28,6 +28,26 @@ interface GenerateAgentOptions {
28
28
  }
29
29
  declare function generateAgent(name: string, options: GenerateAgentOptions): Promise<void>;
30
30
 
31
+ interface GenerateSkillOptions {
32
+ description?: string;
33
+ output?: string;
34
+ plugin?: string;
35
+ references?: boolean;
36
+ global?: boolean;
37
+ dryRun?: boolean;
38
+ }
39
+ declare function generateSkill(name: string, options: GenerateSkillOptions): Promise<void>;
40
+
41
+ interface GeneratePluginOptions {
42
+ description?: string;
43
+ output?: string;
44
+ version?: string;
45
+ author?: string;
46
+ withSkill?: string;
47
+ dryRun?: boolean;
48
+ }
49
+ declare function generatePlugin(name: string, options: GeneratePluginOptions): Promise<void>;
50
+
31
51
  interface DeployOptions {
32
52
  platform?: 'aws' | 'gcp';
33
53
  region?: string;
@@ -42,4 +62,4 @@ declare function loginCommand(options: LoginOptions): Promise<void>;
42
62
 
43
63
  declare function statusCommand(): Promise<void>;
44
64
 
45
- export { deployMCP, generateAgent, generateCommand, generateMCP, loginCommand, statusCommand };
65
+ export { deployMCP, generateAgent, generateCommand, generateMCP, generatePlugin, generateSkill, loginCommand, statusCommand };
package/dist/index.d.ts CHANGED
@@ -28,6 +28,26 @@ interface GenerateAgentOptions {
28
28
  }
29
29
  declare function generateAgent(name: string, options: GenerateAgentOptions): Promise<void>;
30
30
 
31
+ interface GenerateSkillOptions {
32
+ description?: string;
33
+ output?: string;
34
+ plugin?: string;
35
+ references?: boolean;
36
+ global?: boolean;
37
+ dryRun?: boolean;
38
+ }
39
+ declare function generateSkill(name: string, options: GenerateSkillOptions): Promise<void>;
40
+
41
+ interface GeneratePluginOptions {
42
+ description?: string;
43
+ output?: string;
44
+ version?: string;
45
+ author?: string;
46
+ withSkill?: string;
47
+ dryRun?: boolean;
48
+ }
49
+ declare function generatePlugin(name: string, options: GeneratePluginOptions): Promise<void>;
50
+
31
51
  interface DeployOptions {
32
52
  platform?: 'aws' | 'gcp';
33
53
  region?: string;
@@ -42,4 +62,4 @@ declare function loginCommand(options: LoginOptions): Promise<void>;
42
62
 
43
63
  declare function statusCommand(): Promise<void>;
44
64
 
45
- export { deployMCP, generateAgent, generateCommand, generateMCP, loginCommand, statusCommand };
65
+ export { deployMCP, generateAgent, generateCommand, generateMCP, generatePlugin, generateSkill, loginCommand, statusCommand };
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
- "use strict";var U=Object.create;var v=Object.defineProperty;var W=Object.getOwnPropertyDescriptor;var K=Object.getOwnPropertyNames;var B=Object.getPrototypeOf,z=Object.prototype.hasOwnProperty;var V=(e,t)=>{for(var r in t)v(e,r,{get:t[r],enumerable:!0})},_=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of K(t))!z.call(e,i)&&i!==r&&v(e,i,{get:()=>t[i],enumerable:!(n=W(t,i))||n.enumerable});return e};var l=(e,t,r)=>(r=e!=null?U(B(e)):{},_(t||!e||!e.__esModule?v(r,"default",{value:e,enumerable:!0}):r,e)),H=e=>_(v({},"__esModule",{value:!0}),e);var ee={};V(ee,{deployMCP:()=>L,generateAgent:()=>I,generateCommand:()=>G,generateMCP:()=>M,loginCommand:()=>q,statusCommand:()=>N});module.exports=H(ee);var m=l(require("path")),p=l(require("fs-extra")),d=require("@neural-tools/core"),D=l(require("inquirer"));async function M(e,t){d.logger.header(`Generating MCP: ${e}`),t.deployment!=="none"&&await(0,d.requireFeature)("cloud-deployment","Cloud Deployment");let r=t.description;r||(r=(await D.default.prompt([{type:"input",name:"description",message:"Description of your MCP:",default:`${e} MCP server`}])).description);let n=m.default.resolve(t.output||"./apps",e);if(t.dryRun){d.logger.info("Dry run mode - no files will be created"),d.logger.section("Configuration",[`Name: ${e}`,`Description: ${r}`,`Output: ${n}`,`Template: ${t.fastmcp?"FastMCP":"Standard"}`,`CI/CD: ${t.cicd}`,`Deployment: ${t.deployment}`]);return}if(await p.default.pathExists(n)){let{overwrite:i}=await D.default.prompt([{type:"confirm",name:"overwrite",message:`Directory ${n} already exists. Overwrite?`,default:!1}]);if(!i){d.logger.warn("Cancelled");return}await p.default.remove(n)}d.logger.startSpinner("Creating MCP structure...");try{await p.default.ensureDir(n);let i=`[project]
1
+ "use strict";var ee=Object.create;var E=Object.defineProperty;var te=Object.getOwnPropertyDescriptor;var ie=Object.getOwnPropertyNames;var re=Object.getPrototypeOf,ne=Object.prototype.hasOwnProperty;var oe=(e,t)=>{for(var i in t)E(e,i,{get:t[i],enumerable:!0})},T=(e,t,i,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of ie(t))!ne.call(e,n)&&n!==i&&E(e,n,{get:()=>t[n],enumerable:!(r=te(t,n))||r.enumerable});return e};var l=(e,t,i)=>(i=e!=null?ee(re(e)):{},T(t||!e||!e.__esModule?E(i,"default",{value:e,enumerable:!0}):i,e)),se=e=>T(E({},"__esModule",{value:!0}),e);var de={};oe(de,{deployMCP:()=>J,generateAgent:()=>U,generateCommand:()=>Y,generateMCP:()=>L,generatePlugin:()=>B,generateSkill:()=>W,loginCommand:()=>X,statusCommand:()=>Z});module.exports=se(de);var f=l(require("path")),m=l(require("fs-extra")),g=require("@neural-tools/core"),_=l(require("inquirer"));async function L(e,t){g.logger.header(`Generating MCP: ${e}`),t.deployment!=="none"&&await(0,g.requireFeature)("cloud-deployment","Cloud Deployment");let i=t.description;i||(i=(await _.default.prompt([{type:"input",name:"description",message:"Description of your MCP:",default:`${e} MCP server`}])).description);let r=f.default.resolve(t.output||"./apps",e);if(t.dryRun){g.logger.info("Dry run mode - no files will be created"),g.logger.section("Configuration",[`Name: ${e}`,`Description: ${i}`,`Output: ${r}`,`Template: ${t.fastmcp?"FastMCP":"Standard"}`,`CI/CD: ${t.cicd}`,`Deployment: ${t.deployment}`]);return}if(await m.default.pathExists(r)){let{overwrite:n}=await _.default.prompt([{type:"confirm",name:"overwrite",message:`Directory ${r} already exists. Overwrite?`,default:!1}]);if(!n){g.logger.warn("Cancelled");return}await m.default.remove(r)}g.logger.startSpinner("Creating MCP structure...");try{await m.default.ensureDir(r);let n=`[project]
2
2
  name = "mcp-${e}"
3
3
  version = "0.1.0"
4
- description = "${r}"
4
+ description = "${i}"
5
5
  requires-python = ">=3.10"
6
6
  dependencies = [
7
7
  "fastmcp>=2.2.0",
@@ -23,10 +23,10 @@ line-length = 100
23
23
 
24
24
  [tool.ruff]
25
25
  line-length = 100
26
- `;await p.default.writeFile(m.default.join(n,"pyproject.toml"),i,"utf-8");let o=`"""
26
+ `;await m.default.writeFile(f.default.join(r,"pyproject.toml"),n,"utf-8");let o=`"""
27
27
  ${e} MCP Server
28
28
 
29
- ${r}
29
+ ${i}
30
30
  """
31
31
  from fastmcp import FastMCP
32
32
 
@@ -82,9 +82,9 @@ def brainstorm_topic(topic: str) -> str:
82
82
 
83
83
  if __name__ == "__main__":
84
84
  mcp.run()
85
- `;await p.default.writeFile(m.default.join(n,"server.py"),o,"utf-8");let a=`# ${e} MCP Server
85
+ `;await m.default.writeFile(f.default.join(r,"server.py"),o,"utf-8");let s=`# ${e} MCP Server
86
86
 
87
- ${r}
87
+ ${i}
88
88
 
89
89
  ## Quick Start with Docker
90
90
 
@@ -189,7 +189,7 @@ ruff check .
189
189
  ## License
190
190
 
191
191
  MIT
192
- `;await p.default.writeFile(m.default.join(n,"README.md"),a,"utf-8"),await p.default.writeFile(m.default.join(n,"Dockerfile"),`FROM python:3.11-slim
192
+ `;await m.default.writeFile(f.default.join(r,"README.md"),s,"utf-8"),await m.default.writeFile(f.default.join(r,"Dockerfile"),`FROM python:3.11-slim
193
193
 
194
194
  WORKDIR /app
195
195
 
@@ -205,7 +205,7 @@ RUN uv pip install --system --no-cache .
205
205
 
206
206
  # Run the MCP server
207
207
  CMD ["python", "server.py"]
208
- `,"utf-8");let y=`version: '3.8'
208
+ `,"utf-8");let p=`version: '3.8'
209
209
 
210
210
  services:
211
211
  mcp:
@@ -218,7 +218,7 @@ services:
218
218
  - .:/app
219
219
  environment:
220
220
  - PYTHONUNBUFFERED=1
221
- `;if(await p.default.writeFile(m.default.join(n,"docker-compose.yml"),y,"utf-8"),await p.default.writeFile(m.default.join(n,".dockerignore"),`__pycache__
221
+ `;if(await m.default.writeFile(f.default.join(r,"docker-compose.yml"),p,"utf-8"),await m.default.writeFile(f.default.join(r,".dockerignore"),`__pycache__
222
222
  *.pyc
223
223
  *.pyo
224
224
  *.pyd
@@ -235,7 +235,7 @@ venv
235
235
  .git
236
236
  .github
237
237
  README.md
238
- `,"utf-8"),t.cicd==="github"){await p.default.ensureDir(m.default.join(n,".github","workflows"));let h=`name: Deploy MCP
238
+ `,"utf-8"),t.cicd==="github"){await m.default.ensureDir(f.default.join(r,".github","workflows"));let $=`name: Deploy MCP
239
239
 
240
240
  on:
241
241
  push:
@@ -319,22 +319,22 @@ jobs:
319
319
  run: |
320
320
  gcloud builds submit --tag gcr.io/\${{ secrets.GCP_PROJECT_ID }}/mcp-${e}:latest
321
321
  `:""}
322
- `;await p.default.writeFile(m.default.join(n,".github","workflows","deploy.yml"),h,"utf-8")}d.logger.succeedSpinner("MCP created successfully!"),d.logger.section("Next steps",[`1. cd ${n}`,"2. docker-compose up # Start with Docker","","Or for local development:","2. uv pip install -e .","3. python server.py","","Or use MCP Inspector:","2. uv pip install -e .","3. fastmcp dev server.py","","Add to Claude Code settings to use this MCP"]),d.logger.success(`\u2728 MCP "${e}" ready to use!`)}catch(i){throw d.logger.failSpinner("Failed to create MCP"),i}}var $=l(require("path")),O=l(require("os")),b=l(require("fs-extra")),g=require("@neural-tools/core"),R=l(require("inquirer"));async function G(e,t){g.logger.header(`Generating Claude Command: /${e}`);let r=t.description;r||(r=(await R.default.prompt([{type:"input",name:"description",message:"Description of your command:",default:`Execute ${e}`}])).description);let n;t.global?n=$.default.join(O.default.homedir(),".claude","commands"):n=$.default.resolve(t.output||"./claude/commands");let i=$.default.join(n,`${e}.md`);if(t.dryRun){g.logger.info("Dry run mode - no files will be created"),g.logger.section("Configuration",[`Name: /${e}`,`Description: ${r}`,`Output: ${i}`,`Arguments: ${t.args?.join(", ")||"none"}`,`Allowed Tools: ${t.tools?.join(", ")||"all"}`,`Global: ${t.global?"Yes":"No"}`]);return}if(await b.default.pathExists(i)){let{overwrite:o}=await R.default.prompt([{type:"confirm",name:"overwrite",message:`Command /${e} already exists. Overwrite?`,default:!1}]);if(!o){g.logger.warn("Cancelled");return}}g.logger.startSpinner("Creating Claude command...");try{await b.default.ensureDir(n);let o=["---"];t.args&&t.args.length>0&&o.push(`argument-hint: ${t.args.join(" ")}`),o.push(`description: ${r}`),t.tools&&t.tools.length>0&&(o.push("allowed-tools:"),t.tools.forEach(h=>{o.push(` - ${h}`)})),o.push("---"),o.push("");let a=t.args||[],w=a.map((h,S)=>`$${S+1}`).join(" "),y=a.length>0?`
322
+ `;await m.default.writeFile(f.default.join(r,".github","workflows","deploy.yml"),$,"utf-8")}g.logger.succeedSpinner("MCP created successfully!"),g.logger.section("Next steps",[`1. cd ${r}`,"2. docker-compose up # Start with Docker","","Or for local development:","2. uv pip install -e .","3. python server.py","","Or use MCP Inspector:","2. uv pip install -e .","3. fastmcp dev server.py","","Add to Claude Code settings to use this MCP"]),g.logger.success(`\u2728 MCP "${e}" ready to use!`)}catch(n){throw g.logger.failSpinner("Failed to create MCP"),n}}var A=l(require("path")),N=l(require("os")),O=l(require("fs-extra")),y=require("@neural-tools/core"),j=l(require("inquirer"));async function Y(e,t){y.logger.header(`Generating Claude Command: /${e}`);let i=t.description;i||(i=(await j.default.prompt([{type:"input",name:"description",message:"Description of your command:",default:`Execute ${e}`}])).description);let r;t.global?r=A.default.join(N.default.homedir(),".claude","commands"):r=A.default.resolve(t.output||"./claude/commands");let n=A.default.join(r,`${e}.md`);if(t.dryRun){y.logger.info("Dry run mode - no files will be created"),y.logger.section("Configuration",[`Name: /${e}`,`Description: ${i}`,`Output: ${n}`,`Arguments: ${t.args?.join(", ")||"none"}`,`Allowed Tools: ${t.tools?.join(", ")||"all"}`,`Global: ${t.global?"Yes":"No"}`]);return}if(await O.default.pathExists(n)){let{overwrite:o}=await j.default.prompt([{type:"confirm",name:"overwrite",message:`Command /${e} already exists. Overwrite?`,default:!1}]);if(!o){y.logger.warn("Cancelled");return}}y.logger.startSpinner("Creating Claude command...");try{await O.default.ensureDir(r);let o=["---"];t.args&&t.args.length>0&&o.push(`argument-hint: ${t.args.join(" ")}`),o.push(`description: ${i}`),t.tools&&t.tools.length>0&&(o.push("allowed-tools:"),t.tools.forEach($=>{o.push(` - ${$}`)})),o.push("---"),o.push("");let s=t.args||[],u=s.map(($,R)=>`$${R+1}`).join(" "),p=s.length>0?`
323
323
 
324
324
  Arguments:
325
- ${a.map((h,S)=>`- $${S+1}: ${h}`).join(`
326
- `)}`:"",A=`${o.join(`
325
+ ${s.map(($,R)=>`- $${R+1}: ${$}`).join(`
326
+ `)}`:"",D=`${o.join(`
327
327
  `)}# ${e} Command
328
328
 
329
- Execute the ${e} operation${y?":"+y:"."}
329
+ Execute the ${e} operation${p?":"+p:"."}
330
330
 
331
- ${w?`Using arguments: ${w}`:""}
331
+ ${u?`Using arguments: ${u}`:""}
332
332
 
333
333
  Please proceed with the ${e} operation.
334
- `;await b.default.writeFile(i,A,"utf-8"),g.logger.succeedSpinner("Claude command created successfully!"),g.logger.section("Next steps",[t.global?`Command /${e} is now available globally in Claude Code`:`Add the command to your project by copying ${i}`,"","Usage:",a.length>0?` /${e} ${a.join(" ")}`:` /${e}`]),g.logger.success(`\u2728 Command "/${e}" ready to use!`)}catch(o){throw g.logger.failSpinner("Failed to create command"),o}}var k=l(require("path")),T=l(require("os")),P=l(require("fs-extra")),f=require("@neural-tools/core"),E=l(require("inquirer"));async function I(e,t){f.logger.header(`Generating Claude Agent: ${e}`);let r=t.description;r||(r=(await E.default.prompt([{type:"input",name:"description",message:"Description of your agent:",default:`${e} specialized agent`}])).description);let n;t.global?n=k.default.join(T.default.homedir(),".claude","agents"):n=k.default.resolve(t.output||"./claude/agents");let i=k.default.join(n,`${e}.md`),o=t.model||"sonnet";if(t.dryRun){f.logger.info("Dry run mode - no files will be created"),f.logger.section("Configuration",[`Name: ${e}`,`Description: ${r}`,`Output: ${i}`,`Model: ${o}`,`Tools: ${t.tools?.join(", ")||"all"}`,`Global: ${t.global?"Yes":"No"}`]);return}if(await P.default.pathExists(i)){let{overwrite:a}=await E.default.prompt([{type:"confirm",name:"overwrite",message:`Agent ${e} already exists. Overwrite?`,default:!1}]);if(!a){f.logger.warn("Cancelled");return}}f.logger.startSpinner("Creating Claude agent...");try{await P.default.ensureDir(n);let a=["---"];a.push(`model: claude-${o}-4-5`),t.tools&&t.tools.length>0&&(a.push("tools:"),t.tools.forEach(y=>{a.push(` - ${y}`)})),a.push("---"),a.push("");let w=`${a.join(`
334
+ `;await O.default.writeFile(n,D,"utf-8"),y.logger.succeedSpinner("Claude command created successfully!"),y.logger.section("Next steps",[t.global?`Command /${e} is now available globally in Claude Code`:`Add the command to your project by copying ${n}`,"","Usage:",s.length>0?` /${e} ${s.join(" ")}`:` /${e}`]),y.logger.success(`\u2728 Command "/${e}" ready to use!`)}catch(o){throw y.logger.failSpinner("Failed to create command"),o}}var G=l(require("path")),q=l(require("os")),M=l(require("fs-extra")),h=require("@neural-tools/core"),x=l(require("inquirer"));async function U(e,t){h.logger.header(`Generating Claude Agent: ${e}`);let i=t.description;i||(i=(await x.default.prompt([{type:"input",name:"description",message:"Description of your agent:",default:`${e} specialized agent`}])).description);let r;t.global?r=G.default.join(q.default.homedir(),".claude","agents"):r=G.default.resolve(t.output||"./claude/agents");let n=G.default.join(r,`${e}.md`),o=t.model||"sonnet";if(t.dryRun){h.logger.info("Dry run mode - no files will be created"),h.logger.section("Configuration",[`Name: ${e}`,`Description: ${i}`,`Output: ${n}`,`Model: ${o}`,`Tools: ${t.tools?.join(", ")||"all"}`,`Global: ${t.global?"Yes":"No"}`]);return}if(await M.default.pathExists(n)){let{overwrite:s}=await x.default.prompt([{type:"confirm",name:"overwrite",message:`Agent ${e} already exists. Overwrite?`,default:!1}]);if(!s){h.logger.warn("Cancelled");return}}h.logger.startSpinner("Creating Claude agent...");try{await M.default.ensureDir(r);let s=["---"];s.push(`model: claude-${o}-4-5`),t.tools&&t.tools.length>0&&(s.push("tools:"),t.tools.forEach(p=>{s.push(` - ${p}`)})),s.push("---"),s.push("");let u=`${s.join(`
335
335
  `)}# ${e} Agent
336
336
 
337
- ${r}
337
+ ${i}
338
338
 
339
339
  ## Role
340
340
 
@@ -360,4 +360,33 @@ Provide clear, structured responses that:
360
360
  - [Output requirement 3]
361
361
 
362
362
  Focus on ${e} and deliver actionable results.
363
- `;await P.default.writeFile(i,w,"utf-8"),f.logger.succeedSpinner("Claude agent created successfully!"),f.logger.section("Next steps",[t.global?`Agent ${e} is now available globally in Claude Code`:`Add the agent to your project by copying ${i}`,"","Customize the agent by editing:",` ${i}`,"","Use the agent via the Task tool in Claude Code"]),f.logger.success(`\u2728 Agent "${e}" ready to use!`)}catch(a){throw f.logger.failSpinner("Failed to create agent"),a}}var s=require("@neural-tools/core"),j=require("execa"),F=l(require("path")),x=l(require("fs-extra"));async function L(e,t){s.logger.header(`Deploying MCP: ${e}`),await(0,s.requireFeature)("cloud-deployment","Cloud Deployment");let r=t.platform||"aws",n=t.env||"dev";s.logger.info(`Platform: ${r}`),s.logger.info(`Environment: ${n}`);let i=F.default.resolve("./apps",e);if(!await x.default.pathExists(i))throw new Error(`MCP "${e}" not found at ${i}`);s.logger.startSpinner("Building MCP...");try{await(0,j.execa)("npm",["run","build"],{cwd:i,stdio:"pipe"}),s.logger.succeedSpinner("MCP built successfully"),r==="aws"?await J(e,i,t):r==="gcp"&&await Q(e,i,t),s.logger.success(`\u2728 MCP "${e}" deployed successfully!`)}catch(o){throw s.logger.failSpinner("Deployment failed"),o}}async function J(e,t,r){s.logger.startSpinner("Deploying to AWS Lambda..."),s.logger.updateSpinner("Packaging Lambda function..."),await new Promise(n=>setTimeout(n,1e3)),s.logger.updateSpinner("Uploading to S3..."),await new Promise(n=>setTimeout(n,1e3)),s.logger.updateSpinner("Creating/updating Lambda function..."),await new Promise(n=>setTimeout(n,1e3)),s.logger.succeedSpinner("Deployed to AWS Lambda"),s.logger.section("Deployment Info",[`Function: ${e}-${r.env}`,`Region: ${r.region||"us-east-1"}`,`Environment: ${r.env}`,"","Configure in Claude Code:",JSON.stringify({mcpServers:{[e]:{command:"aws",args:["lambda","invoke","--function-name",`${e}-${r.env}`,"--payload","stdin","--output","stdout"]}}},null,2)])}async function Q(e,t,r){s.logger.startSpinner("Deploying to Google Cloud Functions..."),s.logger.updateSpinner("Packaging function..."),await new Promise(n=>setTimeout(n,1e3)),s.logger.updateSpinner("Uploading to Cloud Storage..."),await new Promise(n=>setTimeout(n,1e3)),s.logger.updateSpinner("Deploying Cloud Function..."),await new Promise(n=>setTimeout(n,1e3)),s.logger.succeedSpinner("Deployed to Google Cloud Functions"),s.logger.section("Deployment Info",[`Function: ${e}-${r.env}`,`Region: ${r.region||"us-central1"}`,`Environment: ${r.env}`])}var c=require("@neural-tools/core"),Y=l(require("inquirer"));async function q(e){c.logger.header("AI Toolkit License Management");let t=e.key;if(t||(t=(await Y.default.prompt([{type:"input",name:"licenseKey",message:"Enter your license key:",validate:n=>!n||n.trim().length===0?"License key is required":!0}])).licenseKey),!t){c.logger.error("License key is required");return}c.logger.startSpinner("Validating license...");try{let r=t.split("-");if(r.length<2)throw new Error("Invalid license key format");let n=r[0],i=r[1];if(!Object.values(c.LicenseTier).includes(n))throw new Error("Invalid license tier");await c.licenseManager.saveLicense({tier:n,email:i,key:t,features:[]}),c.logger.succeedSpinner("License activated successfully!");let o=await c.licenseManager.loadLicense();c.logger.section("License Details",[`Tier: ${o.tier.toUpperCase()}`,`Email: ${o.email||"N/A"}`,"Status: Active"]);let a=X();c.logger.section("Available Features",a),c.logger.success("\u2728 Ready to build!")}catch(r){c.logger.failSpinner("License validation failed"),c.logger.error(r.message||"Invalid license key"),c.logger.newline(),c.logger.info("All features are available for free - no license required!")}}function X(){return["\u2713 MCP generation","\u2713 Claude commands","\u2713 Claude agents","\u2713 Vector database integration","\u2713 Semantic caching","\u2713 Fine-tuning workflows","\u2713 Cloud deployment (AWS/GCP)","\u2713 GitHub automation","\u2713 All templates"]}var u=require("@neural-tools/core");async function N(){u.logger.header("AI Toolkit Status");try{let e=await u.licenseManager.loadLicense();u.logger.section("License Information",[`Tier: ${e.tier.toUpperCase()}`,`Email: ${e.email||"N/A"}`,`Status: ${e.expiresAt?Z(e.expiresAt):"Active"}`]);let t=[{name:"MCP Generation",key:"mcp-generation"},{name:"Claude Commands",key:"claude-commands"},{name:"Vector Database",key:"vector-db"},{name:"Semantic Cache",key:"semantic-cache"},{name:"Fine-tuning",key:"fine-tuning"},{name:"Cloud Deployment",key:"cloud-deployment"},{name:"GitHub Automation",key:"github-automation"}],r=await Promise.all(t.map(async n=>`${await u.licenseManager.checkFeature(n.key)?"\u2713":"\u2717"} ${n.name}`));u.logger.section("Feature Availability",r),u.logger.newline(),u.logger.section("Quick Start",["Generate an MCP server:"," ai-toolkit generate mcp github","","Generate a Claude command:"," ai-toolkit generate command search-kb","","View all commands:"," ai-toolkit --help"])}catch{u.logger.error("Failed to load license information"),u.logger.newline(),u.logger.info("All features are available - no license required!"),u.logger.info('Run "ai-toolkit --help" to get started')}}function Z(e){let t=new Date(e),r=new Date;if(t<r)return"Expired";let n=Math.ceil((t.getTime()-r.getTime())/(1e3*60*60*24));return n<=30?`Active (expires in ${n} days)`:"Active"}0&&(module.exports={deployMCP,generateAgent,generateCommand,generateMCP,loginCommand,statusCommand});
363
+ `;await M.default.writeFile(n,u,"utf-8"),h.logger.succeedSpinner("Claude agent created successfully!"),h.logger.section("Next steps",[t.global?`Agent ${e} is now available globally in Claude Code`:`Add the agent to your project by copying ${n}`,"","Customize the agent by editing:",` ${n}`,"","Use the agent via the Task tool in Claude Code"]),h.logger.success(`\u2728 Agent "${e}" ready to use!`)}catch(s){throw h.logger.failSpinner("Failed to create agent"),s}}var k=l(require("path")),K=l(require("os")),P=l(require("fs-extra")),F=l(require("inquirer")),w=require("@neural-tools/core");async function W(e,t){w.logger.header(`Generating Claude Skill: ${e}`);let i=t.description;i||(i=(await F.default.prompt([{type:"input",name:"description",message:"Description of your skill:",default:`${e} skill for Claude Code`}])).description);let r=ae(t),n=k.default.join(r,e),o=k.default.join(n,"SKILL.md"),s=k.default.join(n,"references");if(t.dryRun){w.logger.info("Dry run mode - no files will be created"),w.logger.section("Configuration",[`Name: ${e}`,`Description: ${i}`,`Output: ${o}`,`Plugin: ${t.plugin||"none"}`,`References: ${t.references?"Yes":"No"}`,`Global: ${t.global?"Yes":"No"}`]);return}if(await P.default.pathExists(o)){let{overwrite:u}=await F.default.prompt([{type:"confirm",name:"overwrite",message:`Skill ${e} already exists. Overwrite?`,default:!1}]);if(!u){w.logger.warn("Cancelled");return}}w.logger.startSpinner("Creating Claude skill...");try{await P.default.ensureDir(n),t.references&&await P.default.ensureDir(s);let u=`---
364
+ name: ${e}
365
+ description: ${i}
366
+ ---
367
+
368
+ # ${e}
369
+
370
+ ${i}
371
+
372
+ ## When to use this skill
373
+
374
+ Use this skill when the request matches ${e} workflows.
375
+
376
+ ## Workflow
377
+
378
+ 1. Gather the relevant project context.
379
+ 2. Apply ${e} specific checks and implementation steps.
380
+ 3. Return concrete output and next actions.
381
+ `;if(await P.default.writeFile(o,u,"utf-8"),t.references){let p=`# References
382
+
383
+ Store focused reference material for the ${e} skill in this folder.
384
+ `;await P.default.writeFile(k.default.join(s,"README.md"),p,"utf-8")}w.logger.succeedSpinner("Claude skill created successfully!"),w.logger.section("Next steps",[`Edit the skill definition: ${o}`,t.references?`Add reference docs in: ${s}`:"Use --references to scaffold a references folder"]),w.logger.success(`\u2728 Skill "${e}" ready to use!`)}catch(u){throw w.logger.failSpinner("Failed to create skill"),u}}function ae(e){return e.plugin?k.default.resolve(e.plugin,"skills"):e.global?k.default.join(K.default.homedir(),".claude","skills"):k.default.resolve(e.output||"./claude/skills")}var b=l(require("path")),S=l(require("fs-extra")),I=l(require("inquirer")),C=require("@neural-tools/core");async function B(e,t){C.logger.header(`Generating Claude Plugin: ${e}`);let i=t.description;i||(i=(await I.default.prompt([{type:"input",name:"description",message:"Description of your plugin:",default:`${e} Claude Code plugin`}])).description);let r=i||`${e} Claude Code plugin`,n=b.default.resolve(t.output||"./claude/plugins",e),o=b.default.join(n,".claude-plugin"),s=b.default.join(o,"plugin.json"),u=b.default.join(n,"skills");if(t.dryRun){C.logger.info("Dry run mode - no files will be created"),C.logger.section("Configuration",[`Name: ${e}`,`Description: ${r}`,`Output: ${n}`,`Plugin config: ${s}`,`Version: ${t.version||"0.1.0"}`,`Author: ${t.author||"none"}`,`Starter skill: ${t.withSkill||"none"}`]);return}if(await S.default.pathExists(s)){let{overwrite:p}=await I.default.prompt([{type:"confirm",name:"overwrite",message:`Plugin ${e} already exists. Overwrite config?`,default:!1}]);if(!p){C.logger.warn("Cancelled");return}}C.logger.startSpinner("Creating Claude plugin...");try{await S.default.ensureDir(o),await S.default.ensureDir(u);let p={name:e,version:t.version||"0.1.0",description:r};if(t.author&&(p.author=t.author),await S.default.writeJSON(s,p,{spaces:2}),t.withSkill){let D=b.default.join(u,t.withSkill),$=b.default.join(D,"SKILL.md");await S.default.ensureDir(D);let R=`---
385
+ name: ${t.withSkill}
386
+ description: Starter skill for ${e}
387
+ ---
388
+
389
+ # ${t.withSkill}
390
+
391
+ Starter skill scaffolded with the plugin.
392
+ `;await S.default.writeFile($,R,"utf-8")}C.logger.succeedSpinner("Claude plugin created successfully!"),C.logger.section("Next steps",[`Review plugin manifest: ${s}`,t.withSkill?`Customize skill: ${b.default.join(u,t.withSkill,"SKILL.md")}`:"Use `generate skill <name> --plugin <plugin-dir>` to add skills",`Install with Claude Code using the plugin path: ${n}`]),C.logger.success(`\u2728 Plugin "${e}" ready to use!`)}catch(p){throw C.logger.failSpinner("Failed to create plugin"),p}}var a=require("@neural-tools/core"),z=require("execa"),V=l(require("path")),H=l(require("fs-extra"));async function J(e,t){a.logger.header(`Deploying MCP: ${e}`),await(0,a.requireFeature)("cloud-deployment","Cloud Deployment");let i=t.platform||"aws",r=t.env||"dev";a.logger.info(`Platform: ${i}`),a.logger.info(`Environment: ${r}`);let n=V.default.resolve("./apps",e);if(!await H.default.pathExists(n))throw new Error(`MCP "${e}" not found at ${n}`);a.logger.startSpinner("Building MCP...");try{await(0,z.execa)("npm",["run","build"],{cwd:n,stdio:"pipe"}),a.logger.succeedSpinner("MCP built successfully"),i==="aws"?await le(e,n,t):i==="gcp"&&await ce(e,n,t),a.logger.success(`\u2728 MCP "${e}" deployed successfully!`)}catch(o){throw a.logger.failSpinner("Deployment failed"),o}}async function le(e,t,i){a.logger.startSpinner("Deploying to AWS Lambda..."),a.logger.updateSpinner("Packaging Lambda function..."),await new Promise(r=>setTimeout(r,1e3)),a.logger.updateSpinner("Uploading to S3..."),await new Promise(r=>setTimeout(r,1e3)),a.logger.updateSpinner("Creating/updating Lambda function..."),await new Promise(r=>setTimeout(r,1e3)),a.logger.succeedSpinner("Deployed to AWS Lambda"),a.logger.section("Deployment Info",[`Function: ${e}-${i.env}`,`Region: ${i.region||"us-east-1"}`,`Environment: ${i.env}`,"","Configure in Claude Code:",JSON.stringify({mcpServers:{[e]:{command:"aws",args:["lambda","invoke","--function-name",`${e}-${i.env}`,"--payload","stdin","--output","stdout"]}}},null,2)])}async function ce(e,t,i){a.logger.startSpinner("Deploying to Google Cloud Functions..."),a.logger.updateSpinner("Packaging function..."),await new Promise(r=>setTimeout(r,1e3)),a.logger.updateSpinner("Uploading to Cloud Storage..."),await new Promise(r=>setTimeout(r,1e3)),a.logger.updateSpinner("Deploying Cloud Function..."),await new Promise(r=>setTimeout(r,1e3)),a.logger.succeedSpinner("Deployed to Google Cloud Functions"),a.logger.section("Deployment Info",[`Function: ${e}-${i.env}`,`Region: ${i.region||"us-central1"}`,`Environment: ${i.env}`])}var c=require("@neural-tools/core"),Q=l(require("inquirer"));async function X(e){c.logger.header("AI Toolkit License Management");let t=e.key;if(t||(t=(await Q.default.prompt([{type:"input",name:"licenseKey",message:"Enter your license key:",validate:r=>!r||r.trim().length===0?"License key is required":!0}])).licenseKey),!t){c.logger.error("License key is required");return}c.logger.startSpinner("Validating license...");try{let i=t.split("-");if(i.length<2)throw new Error("Invalid license key format");let r=i[0],n=i[1];if(!Object.values(c.LicenseTier).includes(r))throw new Error("Invalid license tier");await c.licenseManager.saveLicense({tier:r,email:n,key:t,features:[]}),c.logger.succeedSpinner("License activated successfully!");let o=await c.licenseManager.loadLicense();c.logger.section("License Details",[`Tier: ${o.tier.toUpperCase()}`,`Email: ${o.email||"N/A"}`,"Status: Active"]);let s=ue();c.logger.section("Available Features",s),c.logger.success("\u2728 Ready to build!")}catch(i){c.logger.failSpinner("License validation failed"),c.logger.error(i.message||"Invalid license key"),c.logger.newline(),c.logger.info("All features are available for free - no license required!")}}function ue(){return["\u2713 MCP generation","\u2713 Claude commands","\u2713 Claude agents","\u2713 Vector database integration","\u2713 Semantic caching","\u2713 Fine-tuning workflows","\u2713 Cloud deployment (AWS/GCP)","\u2713 GitHub automation","\u2713 All templates"]}var d=require("@neural-tools/core");async function Z(){d.logger.header("AI Toolkit Status");try{let e=await d.licenseManager.loadLicense();d.logger.section("License Information",[`Tier: ${e.tier.toUpperCase()}`,`Email: ${e.email||"N/A"}`,`Status: ${e.expiresAt?pe(e.expiresAt):"Active"}`]);let t=[{name:"MCP Generation",key:"mcp-generation"},{name:"Claude Commands",key:"claude-commands"},{name:"Vector Database",key:"vector-db"},{name:"Semantic Cache",key:"semantic-cache"},{name:"Fine-tuning",key:"fine-tuning"},{name:"Cloud Deployment",key:"cloud-deployment"},{name:"GitHub Automation",key:"github-automation"}],i=await Promise.all(t.map(async r=>`${await d.licenseManager.checkFeature(r.key)?"\u2713":"\u2717"} ${r.name}`));d.logger.section("Feature Availability",i),d.logger.newline(),d.logger.section("Quick Start",["Generate an MCP server:"," ai-toolkit generate mcp github","","Generate a Claude command:"," ai-toolkit generate command search-kb","","View all commands:"," ai-toolkit --help"])}catch{d.logger.error("Failed to load license information"),d.logger.newline(),d.logger.info("All features are available - no license required!"),d.logger.info('Run "ai-toolkit --help" to get started')}}function pe(e){let t=new Date(e),i=new Date;if(t<i)return"Expired";let r=Math.ceil((t.getTime()-i.getTime())/(1e3*60*60*24));return r<=30?`Active (expires in ${r} days)`:"Active"}0&&(module.exports={deployMCP,generateAgent,generateCommand,generateMCP,generatePlugin,generateSkill,loginCommand,statusCommand});
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import u from"path";import c from"fs-extra";import{logger as p,requireFeature as M}from"@neural-tools/core";import D from"inquirer";async function O(e,t){p.header(`Generating MCP: ${e}`),t.deployment!=="none"&&await M("cloud-deployment","Cloud Deployment");let r=t.description;r||(r=(await D.prompt([{type:"input",name:"description",message:"Description of your MCP:",default:`${e} MCP server`}])).description);let n=u.resolve(t.output||"./apps",e);if(t.dryRun){p.info("Dry run mode - no files will be created"),p.section("Configuration",[`Name: ${e}`,`Description: ${r}`,`Output: ${n}`,`Template: ${t.fastmcp?"FastMCP":"Standard"}`,`CI/CD: ${t.cicd}`,`Deployment: ${t.deployment}`]);return}if(await c.pathExists(n)){let{overwrite:i}=await D.prompt([{type:"confirm",name:"overwrite",message:`Directory ${n} already exists. Overwrite?`,default:!1}]);if(!i){p.warn("Cancelled");return}await c.remove(n)}p.startSpinner("Creating MCP structure...");try{await c.ensureDir(n);let i=`[project]
1
+ import d from"path";import u from"fs-extra";import{logger as m,requireFeature as L}from"@neural-tools/core";import M from"inquirer";async function N(e,t){m.header(`Generating MCP: ${e}`),t.deployment!=="none"&&await L("cloud-deployment","Cloud Deployment");let r=t.description;r||(r=(await M.prompt([{type:"input",name:"description",message:"Description of your MCP:",default:`${e} MCP server`}])).description);let i=d.resolve(t.output||"./apps",e);if(t.dryRun){m.info("Dry run mode - no files will be created"),m.section("Configuration",[`Name: ${e}`,`Description: ${r}`,`Output: ${i}`,`Template: ${t.fastmcp?"FastMCP":"Standard"}`,`CI/CD: ${t.cicd}`,`Deployment: ${t.deployment}`]);return}if(await u.pathExists(i)){let{overwrite:n}=await M.prompt([{type:"confirm",name:"overwrite",message:`Directory ${i} already exists. Overwrite?`,default:!1}]);if(!n){m.warn("Cancelled");return}await u.remove(i)}m.startSpinner("Creating MCP structure...");try{await u.ensureDir(i);let n=`[project]
2
2
  name = "mcp-${e}"
3
3
  version = "0.1.0"
4
4
  description = "${r}"
@@ -23,7 +23,7 @@ line-length = 100
23
23
 
24
24
  [tool.ruff]
25
25
  line-length = 100
26
- `;await c.writeFile(u.join(n,"pyproject.toml"),i,"utf-8");let o=`"""
26
+ `;await u.writeFile(d.join(i,"pyproject.toml"),n,"utf-8");let o=`"""
27
27
  ${e} MCP Server
28
28
 
29
29
  ${r}
@@ -82,7 +82,7 @@ def brainstorm_topic(topic: str) -> str:
82
82
 
83
83
  if __name__ == "__main__":
84
84
  mcp.run()
85
- `;await c.writeFile(u.join(n,"server.py"),o,"utf-8");let s=`# ${e} MCP Server
85
+ `;await u.writeFile(d.join(i,"server.py"),o,"utf-8");let s=`# ${e} MCP Server
86
86
 
87
87
  ${r}
88
88
 
@@ -189,7 +189,7 @@ ruff check .
189
189
  ## License
190
190
 
191
191
  MIT
192
- `;await c.writeFile(u.join(n,"README.md"),s,"utf-8"),await c.writeFile(u.join(n,"Dockerfile"),`FROM python:3.11-slim
192
+ `;await u.writeFile(d.join(i,"README.md"),s,"utf-8"),await u.writeFile(d.join(i,"Dockerfile"),`FROM python:3.11-slim
193
193
 
194
194
  WORKDIR /app
195
195
 
@@ -205,7 +205,7 @@ RUN uv pip install --system --no-cache .
205
205
 
206
206
  # Run the MCP server
207
207
  CMD ["python", "server.py"]
208
- `,"utf-8");let f=`version: '3.8'
208
+ `,"utf-8");let c=`version: '3.8'
209
209
 
210
210
  services:
211
211
  mcp:
@@ -218,7 +218,7 @@ services:
218
218
  - .:/app
219
219
  environment:
220
220
  - PYTHONUNBUFFERED=1
221
- `;if(await c.writeFile(u.join(n,"docker-compose.yml"),f,"utf-8"),await c.writeFile(u.join(n,".dockerignore"),`__pycache__
221
+ `;if(await u.writeFile(d.join(i,"docker-compose.yml"),c,"utf-8"),await u.writeFile(d.join(i,".dockerignore"),`__pycache__
222
222
  *.pyc
223
223
  *.pyo
224
224
  *.pyd
@@ -235,7 +235,7 @@ venv
235
235
  .git
236
236
  .github
237
237
  README.md
238
- `,"utf-8"),t.cicd==="github"){await c.ensureDir(u.join(n,".github","workflows"));let y=`name: Deploy MCP
238
+ `,"utf-8"),t.cicd==="github"){await u.ensureDir(d.join(i,".github","workflows"));let C=`name: Deploy MCP
239
239
 
240
240
  on:
241
241
  push:
@@ -319,19 +319,19 @@ jobs:
319
319
  run: |
320
320
  gcloud builds submit --tag gcr.io/\${{ secrets.GCP_PROJECT_ID }}/mcp-${e}:latest
321
321
  `:""}
322
- `;await c.writeFile(u.join(n,".github","workflows","deploy.yml"),y,"utf-8")}p.succeedSpinner("MCP created successfully!"),p.section("Next steps",[`1. cd ${n}`,"2. docker-compose up # Start with Docker","","Or for local development:","2. uv pip install -e .","3. python server.py","","Or use MCP Inspector:","2. uv pip install -e .","3. fastmcp dev server.py","","Add to Claude Code settings to use this MCP"]),p.success(`\u2728 MCP "${e}" ready to use!`)}catch(i){throw p.failSpinner("Failed to create MCP"),i}}import $ from"path";import G from"os";import b from"fs-extra";import{logger as d}from"@neural-tools/core";import R from"inquirer";async function T(e,t){d.header(`Generating Claude Command: /${e}`);let r=t.description;r||(r=(await R.prompt([{type:"input",name:"description",message:"Description of your command:",default:`Execute ${e}`}])).description);let n;t.global?n=$.join(G.homedir(),".claude","commands"):n=$.resolve(t.output||"./claude/commands");let i=$.join(n,`${e}.md`);if(t.dryRun){d.info("Dry run mode - no files will be created"),d.section("Configuration",[`Name: /${e}`,`Description: ${r}`,`Output: ${i}`,`Arguments: ${t.args?.join(", ")||"none"}`,`Allowed Tools: ${t.tools?.join(", ")||"all"}`,`Global: ${t.global?"Yes":"No"}`]);return}if(await b.pathExists(i)){let{overwrite:o}=await R.prompt([{type:"confirm",name:"overwrite",message:`Command /${e} already exists. Overwrite?`,default:!1}]);if(!o){d.warn("Cancelled");return}}d.startSpinner("Creating Claude command...");try{await b.ensureDir(n);let o=["---"];t.args&&t.args.length>0&&o.push(`argument-hint: ${t.args.join(" ")}`),o.push(`description: ${r}`),t.tools&&t.tools.length>0&&(o.push("allowed-tools:"),t.tools.forEach(y=>{o.push(` - ${y}`)})),o.push("---"),o.push("");let s=t.args||[],w=s.map((y,v)=>`$${v+1}`).join(" "),f=s.length>0?`
322
+ `;await u.writeFile(d.join(i,".github","workflows","deploy.yml"),C,"utf-8")}m.succeedSpinner("MCP created successfully!"),m.section("Next steps",[`1. cd ${i}`,"2. docker-compose up # Start with Docker","","Or for local development:","2. uv pip install -e .","3. python server.py","","Or use MCP Inspector:","2. uv pip install -e .","3. fastmcp dev server.py","","Add to Claude Code settings to use this MCP"]),m.success(`\u2728 MCP "${e}" ready to use!`)}catch(n){throw m.failSpinner("Failed to create MCP"),n}}import E from"path";import Y from"os";import A from"fs-extra";import{logger as g}from"@neural-tools/core";import _ from"inquirer";async function q(e,t){g.header(`Generating Claude Command: /${e}`);let r=t.description;r||(r=(await _.prompt([{type:"input",name:"description",message:"Description of your command:",default:`Execute ${e}`}])).description);let i;t.global?i=E.join(Y.homedir(),".claude","commands"):i=E.resolve(t.output||"./claude/commands");let n=E.join(i,`${e}.md`);if(t.dryRun){g.info("Dry run mode - no files will be created"),g.section("Configuration",[`Name: /${e}`,`Description: ${r}`,`Output: ${n}`,`Arguments: ${t.args?.join(", ")||"none"}`,`Allowed Tools: ${t.tools?.join(", ")||"all"}`,`Global: ${t.global?"Yes":"No"}`]);return}if(await A.pathExists(n)){let{overwrite:o}=await _.prompt([{type:"confirm",name:"overwrite",message:`Command /${e} already exists. Overwrite?`,default:!1}]);if(!o){g.warn("Cancelled");return}}g.startSpinner("Creating Claude command...");try{await A.ensureDir(i);let o=["---"];t.args&&t.args.length>0&&o.push(`argument-hint: ${t.args.join(" ")}`),o.push(`description: ${r}`),t.tools&&t.tools.length>0&&(o.push("allowed-tools:"),t.tools.forEach(C=>{o.push(` - ${C}`)})),o.push("---"),o.push("");let s=t.args||[],l=s.map((C,D)=>`$${D+1}`).join(" "),c=s.length>0?`
323
323
 
324
324
  Arguments:
325
- ${s.map((y,v)=>`- $${v+1}: ${y}`).join(`
326
- `)}`:"",S=`${o.join(`
325
+ ${s.map((C,D)=>`- $${D+1}: ${C}`).join(`
326
+ `)}`:"",P=`${o.join(`
327
327
  `)}# ${e} Command
328
328
 
329
- Execute the ${e} operation${f?":"+f:"."}
329
+ Execute the ${e} operation${c?":"+c:"."}
330
330
 
331
- ${w?`Using arguments: ${w}`:""}
331
+ ${l?`Using arguments: ${l}`:""}
332
332
 
333
333
  Please proceed with the ${e} operation.
334
- `;await b.writeFile(i,S,"utf-8"),d.succeedSpinner("Claude command created successfully!"),d.section("Next steps",[t.global?`Command /${e} is now available globally in Claude Code`:`Add the command to your project by copying ${i}`,"","Usage:",s.length>0?` /${e} ${s.join(" ")}`:` /${e}`]),d.success(`\u2728 Command "/${e}" ready to use!`)}catch(o){throw d.failSpinner("Failed to create command"),o}}import k from"path";import I from"os";import P from"fs-extra";import{logger as m}from"@neural-tools/core";import E from"inquirer";async function j(e,t){m.header(`Generating Claude Agent: ${e}`);let r=t.description;r||(r=(await E.prompt([{type:"input",name:"description",message:"Description of your agent:",default:`${e} specialized agent`}])).description);let n;t.global?n=k.join(I.homedir(),".claude","agents"):n=k.resolve(t.output||"./claude/agents");let i=k.join(n,`${e}.md`),o=t.model||"sonnet";if(t.dryRun){m.info("Dry run mode - no files will be created"),m.section("Configuration",[`Name: ${e}`,`Description: ${r}`,`Output: ${i}`,`Model: ${o}`,`Tools: ${t.tools?.join(", ")||"all"}`,`Global: ${t.global?"Yes":"No"}`]);return}if(await P.pathExists(i)){let{overwrite:s}=await E.prompt([{type:"confirm",name:"overwrite",message:`Agent ${e} already exists. Overwrite?`,default:!1}]);if(!s){m.warn("Cancelled");return}}m.startSpinner("Creating Claude agent...");try{await P.ensureDir(n);let s=["---"];s.push(`model: claude-${o}-4-5`),t.tools&&t.tools.length>0&&(s.push("tools:"),t.tools.forEach(f=>{s.push(` - ${f}`)})),s.push("---"),s.push("");let w=`${s.join(`
334
+ `;await A.writeFile(n,P,"utf-8"),g.succeedSpinner("Claude command created successfully!"),g.section("Next steps",[t.global?`Command /${e} is now available globally in Claude Code`:`Add the command to your project by copying ${n}`,"","Usage:",s.length>0?` /${e} ${s.join(" ")}`:` /${e}`]),g.success(`\u2728 Command "/${e}" ready to use!`)}catch(o){throw g.failSpinner("Failed to create command"),o}}import O from"path";import U from"os";import G from"fs-extra";import{logger as f}from"@neural-tools/core";import j from"inquirer";async function K(e,t){f.header(`Generating Claude Agent: ${e}`);let r=t.description;r||(r=(await j.prompt([{type:"input",name:"description",message:"Description of your agent:",default:`${e} specialized agent`}])).description);let i;t.global?i=O.join(U.homedir(),".claude","agents"):i=O.resolve(t.output||"./claude/agents");let n=O.join(i,`${e}.md`),o=t.model||"sonnet";if(t.dryRun){f.info("Dry run mode - no files will be created"),f.section("Configuration",[`Name: ${e}`,`Description: ${r}`,`Output: ${n}`,`Model: ${o}`,`Tools: ${t.tools?.join(", ")||"all"}`,`Global: ${t.global?"Yes":"No"}`]);return}if(await G.pathExists(n)){let{overwrite:s}=await j.prompt([{type:"confirm",name:"overwrite",message:`Agent ${e} already exists. Overwrite?`,default:!1}]);if(!s){f.warn("Cancelled");return}}f.startSpinner("Creating Claude agent...");try{await G.ensureDir(i);let s=["---"];s.push(`model: claude-${o}-4-5`),t.tools&&t.tools.length>0&&(s.push("tools:"),t.tools.forEach(c=>{s.push(` - ${c}`)})),s.push("---"),s.push("");let l=`${s.join(`
335
335
  `)}# ${e} Agent
336
336
 
337
337
  ${r}
@@ -360,4 +360,33 @@ Provide clear, structured responses that:
360
360
  - [Output requirement 3]
361
361
 
362
362
  Focus on ${e} and deliver actionable results.
363
- `;await P.writeFile(i,w,"utf-8"),m.succeedSpinner("Claude agent created successfully!"),m.section("Next steps",[t.global?`Agent ${e} is now available globally in Claude Code`:`Add the agent to your project by copying ${i}`,"","Customize the agent by editing:",` ${i}`,"","Use the agent via the Task tool in Claude Code"]),m.success(`\u2728 Agent "${e}" ready to use!`)}catch(s){throw m.failSpinner("Failed to create agent"),s}}import{logger as a,requireFeature as F}from"@neural-tools/core";import{execa as x}from"execa";import L from"path";import Y from"fs-extra";async function q(e,t){a.header(`Deploying MCP: ${e}`),await F("cloud-deployment","Cloud Deployment");let r=t.platform||"aws",n=t.env||"dev";a.info(`Platform: ${r}`),a.info(`Environment: ${n}`);let i=L.resolve("./apps",e);if(!await Y.pathExists(i))throw new Error(`MCP "${e}" not found at ${i}`);a.startSpinner("Building MCP...");try{await x("npm",["run","build"],{cwd:i,stdio:"pipe"}),a.succeedSpinner("MCP built successfully"),r==="aws"?await N(e,i,t):r==="gcp"&&await U(e,i,t),a.success(`\u2728 MCP "${e}" deployed successfully!`)}catch(o){throw a.failSpinner("Deployment failed"),o}}async function N(e,t,r){a.startSpinner("Deploying to AWS Lambda..."),a.updateSpinner("Packaging Lambda function..."),await new Promise(n=>setTimeout(n,1e3)),a.updateSpinner("Uploading to S3..."),await new Promise(n=>setTimeout(n,1e3)),a.updateSpinner("Creating/updating Lambda function..."),await new Promise(n=>setTimeout(n,1e3)),a.succeedSpinner("Deployed to AWS Lambda"),a.section("Deployment Info",[`Function: ${e}-${r.env}`,`Region: ${r.region||"us-east-1"}`,`Environment: ${r.env}`,"","Configure in Claude Code:",JSON.stringify({mcpServers:{[e]:{command:"aws",args:["lambda","invoke","--function-name",`${e}-${r.env}`,"--payload","stdin","--output","stdout"]}}},null,2)])}async function U(e,t,r){a.startSpinner("Deploying to Google Cloud Functions..."),a.updateSpinner("Packaging function..."),await new Promise(n=>setTimeout(n,1e3)),a.updateSpinner("Uploading to Cloud Storage..."),await new Promise(n=>setTimeout(n,1e3)),a.updateSpinner("Deploying Cloud Function..."),await new Promise(n=>setTimeout(n,1e3)),a.succeedSpinner("Deployed to Google Cloud Functions"),a.section("Deployment Info",[`Function: ${e}-${r.env}`,`Region: ${r.region||"us-central1"}`,`Environment: ${r.env}`])}import{logger as l,licenseManager as A,LicenseTier as W}from"@neural-tools/core";import K from"inquirer";async function B(e){l.header("AI Toolkit License Management");let t=e.key;if(t||(t=(await K.prompt([{type:"input",name:"licenseKey",message:"Enter your license key:",validate:n=>!n||n.trim().length===0?"License key is required":!0}])).licenseKey),!t){l.error("License key is required");return}l.startSpinner("Validating license...");try{let r=t.split("-");if(r.length<2)throw new Error("Invalid license key format");let n=r[0],i=r[1];if(!Object.values(W).includes(n))throw new Error("Invalid license tier");await A.saveLicense({tier:n,email:i,key:t,features:[]}),l.succeedSpinner("License activated successfully!");let o=await A.loadLicense();l.section("License Details",[`Tier: ${o.tier.toUpperCase()}`,`Email: ${o.email||"N/A"}`,"Status: Active"]);let s=z();l.section("Available Features",s),l.success("\u2728 Ready to build!")}catch(r){l.failSpinner("License validation failed"),l.error(r.message||"Invalid license key"),l.newline(),l.info("All features are available for free - no license required!")}}function z(){return["\u2713 MCP generation","\u2713 Claude commands","\u2713 Claude agents","\u2713 Vector database integration","\u2713 Semantic caching","\u2713 Fine-tuning workflows","\u2713 Cloud deployment (AWS/GCP)","\u2713 GitHub automation","\u2713 All templates"]}import{logger as g,licenseManager as _}from"@neural-tools/core";async function V(){g.header("AI Toolkit Status");try{let e=await _.loadLicense();g.section("License Information",[`Tier: ${e.tier.toUpperCase()}`,`Email: ${e.email||"N/A"}`,`Status: ${e.expiresAt?H(e.expiresAt):"Active"}`]);let t=[{name:"MCP Generation",key:"mcp-generation"},{name:"Claude Commands",key:"claude-commands"},{name:"Vector Database",key:"vector-db"},{name:"Semantic Cache",key:"semantic-cache"},{name:"Fine-tuning",key:"fine-tuning"},{name:"Cloud Deployment",key:"cloud-deployment"},{name:"GitHub Automation",key:"github-automation"}],r=await Promise.all(t.map(async n=>`${await _.checkFeature(n.key)?"\u2713":"\u2717"} ${n.name}`));g.section("Feature Availability",r),g.newline(),g.section("Quick Start",["Generate an MCP server:"," ai-toolkit generate mcp github","","Generate a Claude command:"," ai-toolkit generate command search-kb","","View all commands:"," ai-toolkit --help"])}catch{g.error("Failed to load license information"),g.newline(),g.info("All features are available - no license required!"),g.info('Run "ai-toolkit --help" to get started')}}function H(e){let t=new Date(e),r=new Date;if(t<r)return"Expired";let n=Math.ceil((t.getTime()-r.getTime())/(1e3*60*60*24));return n<=30?`Active (expires in ${n} days)`:"Active"}export{q as deployMCP,j as generateAgent,T as generateCommand,O as generateMCP,B as loginCommand,V as statusCommand};
363
+ `;await G.writeFile(n,l,"utf-8"),f.succeedSpinner("Claude agent created successfully!"),f.section("Next steps",[t.global?`Agent ${e} is now available globally in Claude Code`:`Add the agent to your project by copying ${n}`,"","Customize the agent by editing:",` ${n}`,"","Use the agent via the Task tool in Claude Code"]),f.success(`\u2728 Agent "${e}" ready to use!`)}catch(s){throw f.failSpinner("Failed to create agent"),s}}import k from"path";import W from"os";import R from"fs-extra";import x from"inquirer";import{logger as y}from"@neural-tools/core";async function B(e,t){y.header(`Generating Claude Skill: ${e}`);let r=t.description;r||(r=(await x.prompt([{type:"input",name:"description",message:"Description of your skill:",default:`${e} skill for Claude Code`}])).description);let i=z(t),n=k.join(i,e),o=k.join(n,"SKILL.md"),s=k.join(n,"references");if(t.dryRun){y.info("Dry run mode - no files will be created"),y.section("Configuration",[`Name: ${e}`,`Description: ${r}`,`Output: ${o}`,`Plugin: ${t.plugin||"none"}`,`References: ${t.references?"Yes":"No"}`,`Global: ${t.global?"Yes":"No"}`]);return}if(await R.pathExists(o)){let{overwrite:l}=await x.prompt([{type:"confirm",name:"overwrite",message:`Skill ${e} already exists. Overwrite?`,default:!1}]);if(!l){y.warn("Cancelled");return}}y.startSpinner("Creating Claude skill...");try{await R.ensureDir(n),t.references&&await R.ensureDir(s);let l=`---
364
+ name: ${e}
365
+ description: ${r}
366
+ ---
367
+
368
+ # ${e}
369
+
370
+ ${r}
371
+
372
+ ## When to use this skill
373
+
374
+ Use this skill when the request matches ${e} workflows.
375
+
376
+ ## Workflow
377
+
378
+ 1. Gather the relevant project context.
379
+ 2. Apply ${e} specific checks and implementation steps.
380
+ 3. Return concrete output and next actions.
381
+ `;if(await R.writeFile(o,l,"utf-8"),t.references){let c=`# References
382
+
383
+ Store focused reference material for the ${e} skill in this folder.
384
+ `;await R.writeFile(k.join(s,"README.md"),c,"utf-8")}y.succeedSpinner("Claude skill created successfully!"),y.section("Next steps",[`Edit the skill definition: ${o}`,t.references?`Add reference docs in: ${s}`:"Use --references to scaffold a references folder"]),y.success(`\u2728 Skill "${e}" ready to use!`)}catch(l){throw y.failSpinner("Failed to create skill"),l}}function z(e){return e.plugin?k.resolve(e.plugin,"skills"):e.global?k.join(W.homedir(),".claude","skills"):k.resolve(e.output||"./claude/skills")}import b from"path";import S from"fs-extra";import F from"inquirer";import{logger as h}from"@neural-tools/core";async function V(e,t){h.header(`Generating Claude Plugin: ${e}`);let r=t.description;r||(r=(await F.prompt([{type:"input",name:"description",message:"Description of your plugin:",default:`${e} Claude Code plugin`}])).description);let i=r||`${e} Claude Code plugin`,n=b.resolve(t.output||"./claude/plugins",e),o=b.join(n,".claude-plugin"),s=b.join(o,"plugin.json"),l=b.join(n,"skills");if(t.dryRun){h.info("Dry run mode - no files will be created"),h.section("Configuration",[`Name: ${e}`,`Description: ${i}`,`Output: ${n}`,`Plugin config: ${s}`,`Version: ${t.version||"0.1.0"}`,`Author: ${t.author||"none"}`,`Starter skill: ${t.withSkill||"none"}`]);return}if(await S.pathExists(s)){let{overwrite:c}=await F.prompt([{type:"confirm",name:"overwrite",message:`Plugin ${e} already exists. Overwrite config?`,default:!1}]);if(!c){h.warn("Cancelled");return}}h.startSpinner("Creating Claude plugin...");try{await S.ensureDir(o),await S.ensureDir(l);let c={name:e,version:t.version||"0.1.0",description:i};if(t.author&&(c.author=t.author),await S.writeJSON(s,c,{spaces:2}),t.withSkill){let P=b.join(l,t.withSkill),C=b.join(P,"SKILL.md");await S.ensureDir(P);let D=`---
385
+ name: ${t.withSkill}
386
+ description: Starter skill for ${e}
387
+ ---
388
+
389
+ # ${t.withSkill}
390
+
391
+ Starter skill scaffolded with the plugin.
392
+ `;await S.writeFile(C,D,"utf-8")}h.succeedSpinner("Claude plugin created successfully!"),h.section("Next steps",[`Review plugin manifest: ${s}`,t.withSkill?`Customize skill: ${b.join(l,t.withSkill,"SKILL.md")}`:"Use `generate skill <name> --plugin <plugin-dir>` to add skills",`Install with Claude Code using the plugin path: ${n}`]),h.success(`\u2728 Plugin "${e}" ready to use!`)}catch(c){throw h.failSpinner("Failed to create plugin"),c}}import{logger as a,requireFeature as H}from"@neural-tools/core";import{execa as J}from"execa";import Q from"path";import X from"fs-extra";async function Z(e,t){a.header(`Deploying MCP: ${e}`),await H("cloud-deployment","Cloud Deployment");let r=t.platform||"aws",i=t.env||"dev";a.info(`Platform: ${r}`),a.info(`Environment: ${i}`);let n=Q.resolve("./apps",e);if(!await X.pathExists(n))throw new Error(`MCP "${e}" not found at ${n}`);a.startSpinner("Building MCP...");try{await J("npm",["run","build"],{cwd:n,stdio:"pipe"}),a.succeedSpinner("MCP built successfully"),r==="aws"?await ee(e,n,t):r==="gcp"&&await te(e,n,t),a.success(`\u2728 MCP "${e}" deployed successfully!`)}catch(o){throw a.failSpinner("Deployment failed"),o}}async function ee(e,t,r){a.startSpinner("Deploying to AWS Lambda..."),a.updateSpinner("Packaging Lambda function..."),await new Promise(i=>setTimeout(i,1e3)),a.updateSpinner("Uploading to S3..."),await new Promise(i=>setTimeout(i,1e3)),a.updateSpinner("Creating/updating Lambda function..."),await new Promise(i=>setTimeout(i,1e3)),a.succeedSpinner("Deployed to AWS Lambda"),a.section("Deployment Info",[`Function: ${e}-${r.env}`,`Region: ${r.region||"us-east-1"}`,`Environment: ${r.env}`,"","Configure in Claude Code:",JSON.stringify({mcpServers:{[e]:{command:"aws",args:["lambda","invoke","--function-name",`${e}-${r.env}`,"--payload","stdin","--output","stdout"]}}},null,2)])}async function te(e,t,r){a.startSpinner("Deploying to Google Cloud Functions..."),a.updateSpinner("Packaging function..."),await new Promise(i=>setTimeout(i,1e3)),a.updateSpinner("Uploading to Cloud Storage..."),await new Promise(i=>setTimeout(i,1e3)),a.updateSpinner("Deploying Cloud Function..."),await new Promise(i=>setTimeout(i,1e3)),a.succeedSpinner("Deployed to Google Cloud Functions"),a.section("Deployment Info",[`Function: ${e}-${r.env}`,`Region: ${r.region||"us-central1"}`,`Environment: ${r.env}`])}import{logger as p,licenseManager as I,LicenseTier as ie}from"@neural-tools/core";import re from"inquirer";async function ne(e){p.header("AI Toolkit License Management");let t=e.key;if(t||(t=(await re.prompt([{type:"input",name:"licenseKey",message:"Enter your license key:",validate:i=>!i||i.trim().length===0?"License key is required":!0}])).licenseKey),!t){p.error("License key is required");return}p.startSpinner("Validating license...");try{let r=t.split("-");if(r.length<2)throw new Error("Invalid license key format");let i=r[0],n=r[1];if(!Object.values(ie).includes(i))throw new Error("Invalid license tier");await I.saveLicense({tier:i,email:n,key:t,features:[]}),p.succeedSpinner("License activated successfully!");let o=await I.loadLicense();p.section("License Details",[`Tier: ${o.tier.toUpperCase()}`,`Email: ${o.email||"N/A"}`,"Status: Active"]);let s=oe();p.section("Available Features",s),p.success("\u2728 Ready to build!")}catch(r){p.failSpinner("License validation failed"),p.error(r.message||"Invalid license key"),p.newline(),p.info("All features are available for free - no license required!")}}function oe(){return["\u2713 MCP generation","\u2713 Claude commands","\u2713 Claude agents","\u2713 Vector database integration","\u2713 Semantic caching","\u2713 Fine-tuning workflows","\u2713 Cloud deployment (AWS/GCP)","\u2713 GitHub automation","\u2713 All templates"]}import{logger as w,licenseManager as T}from"@neural-tools/core";async function se(){w.header("AI Toolkit Status");try{let e=await T.loadLicense();w.section("License Information",[`Tier: ${e.tier.toUpperCase()}`,`Email: ${e.email||"N/A"}`,`Status: ${e.expiresAt?ae(e.expiresAt):"Active"}`]);let t=[{name:"MCP Generation",key:"mcp-generation"},{name:"Claude Commands",key:"claude-commands"},{name:"Vector Database",key:"vector-db"},{name:"Semantic Cache",key:"semantic-cache"},{name:"Fine-tuning",key:"fine-tuning"},{name:"Cloud Deployment",key:"cloud-deployment"},{name:"GitHub Automation",key:"github-automation"}],r=await Promise.all(t.map(async i=>`${await T.checkFeature(i.key)?"\u2713":"\u2717"} ${i.name}`));w.section("Feature Availability",r),w.newline(),w.section("Quick Start",["Generate an MCP server:"," ai-toolkit generate mcp github","","Generate a Claude command:"," ai-toolkit generate command search-kb","","View all commands:"," ai-toolkit --help"])}catch{w.error("Failed to load license information"),w.newline(),w.info("All features are available - no license required!"),w.info('Run "ai-toolkit --help" to get started')}}function ae(e){let t=new Date(e),r=new Date;if(t<r)return"Expired";let i=Math.ceil((t.getTime()-r.getTime())/(1e3*60*60*24));return i<=30?`Active (expires in ${i} days)`:"Active"}export{Z as deployMCP,K as generateAgent,q as generateCommand,N as generateMCP,V as generatePlugin,B as generateSkill,ne as loginCommand,se as statusCommand};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neural-tools/cli",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "description": "CLI for Neural Tools - Generate MCPs, Claude commands, and AI workflows",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -36,7 +36,7 @@
36
36
  "fs-extra": "^11.2.0",
37
37
  "globby": "^14.0.0",
38
38
  "picocolors": "^1.0.0",
39
- "@neural-tools/core": "0.1.6"
39
+ "@neural-tools/core": "0.1.7"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@types/fs-extra": "^11.0.4",