luaLLM-MCP
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., "@luaLLM-MCPacquire model mistral-7b"
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.
luaLLM-MCP
MCP Server for luaLLM - safe model management via leases.
Installation
# Install uv if not already installed
curl -LsSf https://astral.sh/uv/install.sh | sh
# Install the MCP server
make installRelated MCP server: MCP Server with Local LLM
Configuration
Runtime state is stored in OS-appropriate application data directories:
Linux/macOS:
~/.config/luaLLM-MCP/Windows:
%LOCALAPPDATA%\luaLLM-MCP\
Override with:
export LUALLM_MCP_STATE_DIR=/custom/path
export LUALLM_MCP_LEASE_TTL_SECONDS=7200 # 2 hours (default)Usage
# Run the MCP server
make run
# Or directly with uv
uv run python mcp_server.pyThe server uses stdio transport for MCP communication. It will print startup info and then wait for requests from an MCP client.
Manual Testing
Test that the server initializes correctly:
uv run python -c "
import asyncio
from mcp import StdioServerParameters
from mcp.client.stdio import stdio_client
from mcp import ClientSession
async def test():
params = StdioServerParameters(command='uv', args=['run', 'python', 'mcp_server.py'])
async with stdio_client(params) as (read_stream, write_stream):
async with ClientSession(read_stream, write_stream) as session:
await session.initialize()
tools = await session.list_tools()
print(f'Found {len(tools.tools)} tools:')
for t in tools.tools:
print(f' - {t.name}')
asyncio.run(test())
"Expected output:
Found 9 tools:
- list_models
- get_model_info
- get_server_status
- get_capabilities
- acquire_model
- release_model
- get_model_logs
- health_check
- list_leasesMCP Tools
Tool | Description |
| List all available models |
| Get model metadata |
| Get running servers |
| List MCP capabilities |
| Acquire lease on model |
| Release lease |
| Get model logs |
| Check luaLLM availability |
| List current leases |
Safety Features
Allowlist only: Only approved tools exposed
Lease-based lifecycle: Models only stopped when all leases released
Instance isolation: Different presets = different instances
Atomic state writes: State file updated safely
Structured errors: All responses are JSON with success/error fields
Development
make check # Verify imports work
make test # Run tests
make clean # Clean build artifactsArchitecture
Lease Model
Models are "leased" when started via MCP. Workflows acquire leases via acquire_model() and release them with release_model(lease_id). A model is only stopped when the last lease is released.
State Schema
{
"schema_version": "1.0",
"instances": [
{
"instance_id": "uuid",
"model": "mistral-7b",
"preset": "throughput",
"managed_by_mcp": true,
"started_at": "2024-01-01T10:00:00Z",
"port": 8080
}
],
"leases": [
{
"lease_id": "uuid",
"instance_id": "uuid",
"client_id": "claude-3-5-sonnet",
"purpose": "chat-completion",
"acquired_at": "2024-01-01T10:01:00Z",
"renewed_at": "2024-01-01T10:30:00Z"
}
]
}Instance Matching
acquire_model() only reuses an existing instance when both model and preset match exactly. Different presets create different instances.
This server cannot be installed
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/ripter/luaLLM-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server