JIT Tool Synthesis
This server enables on-demand AI-powered tool generation with human approval gates and safe sandboxed execution — allowing you to create, manage, and run dynamically synthesized TypeScript tools using an LLM.
Synthesize tools (
synthesize_tool) — Describe a capability in natural language (with optional example input/output) and the LLM generates a working TypeScript tool, placed in a pending approval queueManage approval workflow — Use
list_pendingto review queued tools,approve_toolto activate them, orreject_toolto discard themExecute tools safely (
execute_tool) — Run approved tools in an isolated VM sandbox with blocked dangerous patternsBrowse and manage tools — Use
list_toolsto see available tools,get_toolfor full details (code, metadata), andremove_toolto delete permanentlyConfigure LLM at runtime — Use
get_configandset_configto view or switch providers (OpenAI, OpenRouter, Ollama, Groq, or any OpenAI-compatible API), models, and base URLs without restarting the server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@JIT Tool SynthesisCreate a tool that fetches the latest top stories from Hacker News"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
JIT Tool Synthesis v4
LLM-powered on-demand tool generation with human-in-the-loop approval and safe execution.
Overview
This system generates TypeScript tools dynamically using an LLM, requires human approval before execution, and runs them in a sandboxed environment.
Related MCP server: Code Mode MCP Server
Architecture
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Synthesizer │────▶│ Approval │────▶│ Sandbox │
│ (LLM) │ │ (Human Gate) │ │ (Execution) │
└─────────────┘ └──────────────┘ └─────────────┘
│ │ │
▼ ▼ ▼
Generates TS Waits for Runs in
tool code human approval isolated envComponents
File | Purpose |
| Generates tool code using any OpenAI-compatible LLM |
| Human-in-the-loop gate — requires approval before execution |
| Safe execution environment for generated code |
| Tool persistence and storage |
| MCP server integration |
| Runtime configuration management |
Provider-Agnostic
This tool works with any OpenAI-compatible LLM API:
OpenRouter — 100+ models (Claude, GPT, Llama, etc.)
OpenAI — GPT-4o, o3, etc.
Ollama — Local models (Llama, Qwen, etc.)
LM Studio — Local models with GUI
Groq — Fast inference
Any other OpenAI-compatible API
Setup
# Install dependencies
npm install
# Copy environment template
cp .env.example .envConfigure Your LLM Provider
Edit .env with your provider details:
# Option 1: OpenRouter (default - 100+ models)
LLM_API_KEY=your-openrouter-key
LLM_BASE_URL=https://openrouter.ai/api/v1
LLM_MODEL=anthropic/claude-sonnet-4-6
# Option 2: OpenAI direct
LLM_API_KEY=sk-...
LLM_BASE_URL=https://api.openai.com/v1
LLM_MODEL=gpt-5.4
# Option 3: Ollama (local)
LLM_BASE_URL=http://localhost:11434/v1
LLM_MODEL=llama-3.3
# Option 4: Groq
LLM_API_KEY=gsk_...
LLM_BASE_URL=https://api.groq.com/openai/v1
LLM_MODEL=llama-3.3-70b-versatileUsage
Build
npm run buildTest with MCP Inspector
The fastest way to verify everything works:
npx @modelcontextprotocol/inspector node dist/server.jsConnect to MCP Clients
This server works with any MCP client. Example configs:
Claude Desktop — add to your Claude Desktop MCP settings:
{
"mcpServers": {
"jit-tool-synthesis": {
"command": "node",
"args": ["/absolute/path/to/jit-tool-synthesis/dist/server.js"],
"env": {
"LLM_API_KEY": "your-api-key",
"LLM_BASE_URL": "https://openrouter.ai/api/v1",
"LLM_MODEL": "anthropic/claude-sonnet-4-6"
}
}
}
}Claude Code:
claude mcp add jit-tools node /absolute/path/to/jit-tool-synthesis/dist/server.jsVS Code (Copilot):
code --add-mcp '{"name":"jit-tools","type":"stdio","command":"node","args":["/absolute/path/to/jit-tool-synthesis/dist/server.js"]}'Cursor — add to .cursor/mcp.json:
{
"mcpServers": {
"jit-tools": {
"command": "node",
"args": ["/absolute/path/to/jit-tool-synthesis/dist/server.js"],
"env": { "LLM_API_KEY": "your-api-key" }
}
}
}Runtime Configuration
You can change the LLM provider without restarting:
# View current config
get_config
# Change model at runtime
set_config model=openai/gpt-5.4MCP Tools
Tool | Description |
| Generate a new tool from natural language |
| Test a pending tool with sample params before approval |
| Activate a pending tool |
| Discard a pending tool |
| Run an approved tool |
| List all approved tools |
| View tool details |
| Delete a tool |
| List tools waiting for approval |
| View LLM configuration |
| Change LLM provider/model at runtime |
Workflow
Request — User asks for a tool (e.g., "create a color converter")
Synthesize — LLM generates tool code
Test — Validate with sample params before committing
Approve — Human reviews and approves the code
Execute — Tool runs in sandboxed environment
Store — Approved tools persist across sessions
Environment Variables
Variable | Description | Default |
| API key for your provider | (required for cloud) |
| API endpoint | |
| Model to use | anthropic/claude-sonnet-4-6 |
Also supported (legacy): OPENROUTER_API_KEY, OPENAI_API_KEY, OPENAI_BASE_URL, SYNTHESIZER_MODEL
Security
Generated code runs in isolated VM sandbox
Blocked patterns prevent dangerous code (process, require, eval, etc.)
API keys not stored in config file
Status
Production Ready — Phase 1 complete.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/EyeSeeThru/jit-tool-synthesis'
If you have feedback or need assistance with the MCP directory API, please join our Discord server