@houtini/lm

data-ai MCP Server

MCP server that saves Claude Code tokens by delegating bounded tasks to local or cloud LLMs. Works with LM Studio, Ollama, vLLM, DeepSeek, Groq, Cerebras.

VerifiedInstall Ready
data-aidata-ai
4 views91 stars20 forksv2.13.2MIT

Why This Matters

Discovered via github-topic:claude-mcp and last synced 3mo ago.

VerifiedInstall Ready
Source
github-topic:claude-mcp
Stars
91
Last synced
3mo ago
Install
Instructions detected

Install

1. Install the package

npx @houtini/lm

2. Add to claude_desktop_config.json

{
  "mcpServers": {
    "-houtini-lm": {
      "command": "npx",
      "args": [
        "@houtini/lm"
      ]
    }
  }
}

Config file location: ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) / %APPDATA%\Claude\claude_desktop_config.json (Windows)

41
Tools
0
Resources
0
Prompts
Standard I/O
Transport

Available Tools (41)

temperature

no

context

no

LM_STUDIO_URL

`http://localhost:1234`

code

yes

task

yes

LM_STUDIO_MODEL

*(auto-detect)*

LM_STUDIO_PASSWORD

*(none)*

system

no

message

yes

input

yes

What

URL

language

no

LM_CONTEXT_WINDOW

`100000`

lifetime

213

instruction

yes

paths

yes

Scope

Calls

891

36.9

HOUTINI_LM_PROVIDER

*(auto-detect)*

session

7

cross-referenced

embed

json_schema

no

HOUTINI_LM_CONTEXT_WINDOW

`100000`

2026-04-20

### Reasoning-token overhead (lifetime) 124 / 47,183 completion tokens spent on hidden reasoning (0.3%). Low — reasoning is effectively suppressed. ``` The reasoning-token overhead line is the canary for "is `reasoning_effort` actually being honoured on this model and this backend?" — above ~30% is a signal to investigate. ## Structured JSON output Both `chat` and `custom_prompt` accept a `json_schema` parameter that forces the response to conform to a JSON Schema. LM Studio uses grammar-based sampling to guarantee valid output - no hoping the model remembers to close its brackets. ```json { "json_schema": { "name": "code_review", "schema": { "type": "object", "properties": { "issues": { "type": "array", "items": { "type": "object", "properties": { "line": { "type": "number" }, "severity": { "type": "string" }, "description": { "type": "string" } }, "required": ["line", "severity", "description"] } } }, "required": ["issues"] } } } ``` ## Getting good results from local models Qwen, Llama, Nemotron, GLM - they score brilliantly on coding benchmarks now. The gap between a good and bad result is almost always prompt quality, not model capability. I've spent a fair bit of time on this. **Send complete code.** Local models hallucinate details when you give them truncated input. If a file's too large, send the relevant function - not a snippet with `...` in the middle. **Be explicit about output format.** "Return a JSON array" or "respond in bullet points" - don't leave it open-ended. Smaller models need this. **Set a specific persona.** "Expert Rust developer who cares about memory safety" gets noticeably better results than "helpful assistant." **State constraints.** "No preamble", "reference line numbers", "max 5 bullet points" - tell the model what *not* to do as well as what to do. **Include surrounding context.** For code generation, send imports, types, and function signatures - not just the function body. **One call at a time.** As of v2.8.0, houtini-lm enforces this automatically with a request semaphore. Parallel calls queue up and run one at a time, so each gets the full timeout budget instead of stacking. ## Self-test (shakedown) The canonical way to verify an install and get an honest read on what the loaded model can do on your hardware: ```bash npm run shakedown ``` This runs [`shakedown.mjs`](./shakedown.mjs) — an end-to-end test that exercises all seven tools (`discover` → `list_models` → `chat` → `custom_prompt` → `code_task` → `code_task_files` → `embed`) and prints a summary table with real TTFT, tok/s, token counts, and reasoning-token split for each call. Takes under a minute on a decent rig. Sample output tail: ``` Summary 7/7 steps passed on LM Studio, model=nvidia/nemotron-3-nano

answered

custom_prompt

Task

Why it works locally

Parameter

Required

OK

TTFT (ms)

Variable

Default

max_tokens

no

Session

7

code_task

✅

HOUTINI_LM_API_KEY

*(none)*

model

no

Lifetime

213

HOUTINI_LM_MODEL

*(auto-detect)*

Model

Scope

872

43.9

Reasoning

Notes

HOUTINI_LM_ENDPOINT_URL

`http://localhost:1234`

code_task_files

✅