NimbleTools CLI (ntcli)

Command-line interface for the NimbleTools MCP Platform. Deploy, manage, and integrate Model Context Protocol (MCP) servers with Claude Desktop.
Features
- 🚀 Deploy MCP servers from a community registry to Kubernetes
- 🔧 Manage workspaces with isolated environments and access tokens
- 🤖 Claude Desktop integration with automatic configuration generation
- 🛠️ MCP client tools for testing and interacting with deployed servers
- 🔐 Secure authentication with Clerk OAuth and workspace-scoped tokens
- ⚡ Scale-to-zero serverless execution with KEDA auto-scaling
- 🎯 TypeScript with full type safety and modern ES modules
Quick Start
npm install -g @nimbletools/ntcli
ntcli auth login
ntcli workspace create my-project
ntcli registry list
ntcli server deploy ai.nimbletools/nationalparks-mcp
ntcli secrets set NPS_API_KEY=YOUR_API_KEY
ntcli mcp call nationalparks-mcp search_parks --arg query="Yellowstone"
ntcli server claude-config nationalparks-mcp
👉 See QUICKSTART.md for detailed setup instructions
Installation
NPM (Recommended)
npm install -g @nimbletools/ntcli
From Source
git clone https://github.com/nimbletools/ntcli.git
cd ntcli
npm install
npm run build
npm link
Commands
Platform Information
ntcli info
ntcli info --verbose
ntcli info --discord
ntcli info --docs
Authentication
ntcli auth login
ntcli auth status
ntcli auth logout
Workspace Management
ntcli workspace create <name>
ntcli workspace list
ntcli workspace switch <name>
ntcli workspace delete <name>
ntcli workspace clear
ntcli workspace sync
Server Management
ntcli server deploy <server-id>
ntcli server list
ntcli server info <server-id>
ntcli server scale <server-id> 3
ntcli server logs <server-id>
ntcli server remove <server-id>
MCP Client
ntcli mcp connect <server-id>
ntcli mcp tools <server-id>
ntcli mcp call <server-id> <tool> --arg key=value
Domain Management
ntcli domain show
ntcli domain show --verbose
ntcli domain set <domain>
ntcli domain set <domain> --insecure
Registry & Claude Integration
ntcli registry list
ntcli registry show <server-id>
ntcli server claude-config <server-id>
Configuration Management
ntcli config show
ntcli config reset
Token Management
ntcli token refresh
ntcli token create
ntcli token list
ntcli token revoke <jti>
ntcli token show
Claude Desktop Integration
ntcli makes it easy to integrate deployed MCP servers with Claude Desktop:
ntcli server claude-config nationalparks-mcp
Example output:
{
"mcpServers": {
"nationalparks-mcp": {
"command": "npx",
"args": [
"@nimbletools/mcp-http-bridge",
"--endpoint",
"https://mcp.nimbletools.ai/{uuid}/nationalparks-mcp/mcp",
"--token",
"your-workspace-token"
]
}
}
}
LangChain Integration
Use deployed MCP servers directly in LangChain applications:
import { DynamicTool } from "@langchain/core/tools";
import { ChatOpenAI } from "@langchain/openai";
const searchParks = new DynamicTool({
name: "search_parks",
description: "Search for national parks",
func: async (query) => {
const response = await fetch(
`https://mcp.nimbletools.ai/${workspaceId}/nationalparks-mcp/mcp`,
{
method: "POST",
headers: {
Authorization: `Bearer ${workspaceToken}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
jsonrpc: "2.0",
method: "tools/call",
params: { name: "search_parks", arguments: { query } },
}),
}
);
return (await response.json()).result?.content?.[0]?.text;
},
});
const llm = new ChatOpenAI({ modelName: "gpt-4" });
const tools = [searchParks];
👉 See examples/langchain-example.js for a complete working example
Configuration
Domain Configuration
Configure the API domain for connecting to different NimbleTools deployments:
ntcli domain show
ntcli domain show --verbose
ntcli domain set nimbletools.ai
ntcli domain set localhost:3000
ntcli domain set dev.mycompany.com
ntcli domain set internal.api.com --insecure
Environment Variables
CLERK_OAUTH_CLIENT_ID | Clerk OAuth Client ID | Built-in default |
NTCLI_DEFAULT_PORT | OAuth callback server port | 41247 |
NTCLI_OAUTH_TIMEOUT | OAuth timeout (ms) | 300000 (5 minutes) |
Note: The API has been restructured for improved routing:
- Management API (
api.nimbletools.ai): Workspaces, tokens, secrets, registry, server management
- MCP Runtime (
mcp.nimbletools.ai): MCP protocol operations with simplified paths
Examples
Complete Workflow
ntcli auth login
ntcli workspace create data-analysis --description "Data analysis workspace"
ntcli server deploy nationalparks-mcp
ntcli secrets set NPS_API_KEY=YOUR_API_KEY
ntcli server deploy weather-mcp --cpu "500m" --memory "1Gi"
ntcli mcp tools nationalparks-mcp
ntcli mcp call nationalparks-mcp search_parks --arg query="Yellowstone"
ntcli mcp call weather-mcp get_forecast --arg location="New York"
ntcli server scale nationalparks-mcp --replicas 3 --max-replicas 10
ntcli server claude-config nationalparks-mcp > nationalparks-config.json
ntcli server claude-config weather-mcp > weather-config.json
cd examples
npm install && npm run langchain
ntcli server logs nationalparks-mcp --lines 100
ntcli workspace list
LangChain Integration
ntcli workspace list
ntcli token show
export NTCLI_WORKSPACE_TOKEN="your-workspace-token"
export OPENAI_API_KEY="your-openai-key"
cd examples
npm install
node langchain-example.js
Advanced Usage
ntcli token create
ntcli token refresh --expires-in 86400
ntcli workspace select
ntcli server deploy my-server --verbose --debug
ntcli server claude-config my-server | pbcopy
Troubleshooting
Workspace Sync Issues
If your local workspace list doesn't match the server, use these debugging commands:
Check Sync Status
ntcli workspace sync
ntcli ws sync
Sample Output:
📊 Sync Summary
Server workspaces: 2
Local workspaces: 1
In sync: 1
On server only: 1
Local only: 0
⚠️ Workspaces on server but not locally:
production-workspace (a1b2c3d4-...)
💡 To use these workspaces, you need to get access tokens:
💡 `ntcli token refresh <workspace-name>`
Fix Server-Only Workspaces
ntcli token refresh production-workspace
ntcli workspace switch production-workspace
Debug Storage Files
ntcli workspace debug
ntcli ws debug
ntcli ws debug --verbose
Sample Output:
🔍 NimbleTools Configuration Debug
📁 Workspaces File:
Path: ~/.nimbletools/workspaces.json
Exists: ✓
Workspaces count: 2
Active workspace ID: ws-my-project-12345...
Individual workspaces:
✓ my-project (ws-my-project-12345...)
Token expires: Valid (expires in 120 minutes)
✗ old-workspace (ws-old-workspace-67890...)
Token expires: Expired (expired 2 days ago)
Common Issues
"Workspace not found locally"
Problem: You see a workspace in ntcli ws sync but can't switch to it.
Solution: Get an access token for the server workspace:
ntcli token refresh <workspace-name>
ntcli ws switch <workspace-name>
"Already authenticated" after logout
Problem: ntcli auth login says you're already logged in after logout.
Solution: Force re-authentication:
ntcli auth login --force
Server returns HTML instead of JSON
Problem: Getting "Invalid JSON response" errors with HTML content.
Solution: This usually indicates an API endpoint issue. Check:
ntcli health --debug
Architecture
The NimbleTools MCP Platform provides:
- Cloud-hosted execution with reliable server deployment
- Multi-tenant workspaces with isolated environments
- Community MCP registry for server discovery and deployment
- Secure credential injection at runtime
- Production-ready monitoring and logging
👉 See ARCHITECTURE.md for detailed system diagrams and data flow
Development
See DEVELOPMENT.md for development setup, testing commands, and contribution guidelines.
git clone https://github.com/nimbletools/ntcli.git
cd ntcli
npm install
npm run build
npm link
ntcli --help
License
Apache 2.0 - see LICENSE for details.
Support
Join our Discord community to connect with other contributors and maintainers.