A side-by-side look at the Lm and Pqs MCP Server MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Lm for conversational ai work as a local process; choose Pqs MCP Server for conversational ai as a local process. You can also run both side by side in one mcpServers block.
HOUTINI_LM_ENDPOINT_URL, HOUTINI_LM_API_KEY, HOUTINI_LM_MODEL, HOUTINI_LM_SERIALISE.chat, custom_prompt, code_task.PQS_BASE.score_prompt, optimize_prompt.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Conversational AI | Conversational AI |
| Quality signal | 61/100 · Good | 56/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | Not declared | Not declared |
| Pricing | Not declared | Not declared |
| Required env vars | HOUTINI_LM_ENDPOINT_URLHOUTINI_LM_API_KEYHOUTINI_LM_MODELHOUTINI_LM_SERIALISE | PQS_BASE |
| Verified owner | Community listing | Community listing |
| GitHub stars | 121 | 2 |
| Directory activity | 0 views 0 installs 0 upvotes | 2 views 0 installs 0 upvotes |
| Tools | 8 | 2 |
| Full listing | View Lm | View Pqs MCP Server |
chatThe workhorse. Send a task, get an answer. The description includes planning triggers that nudge Claude to identify offloadable work when it's starting a big task.custom_promptThree-part prompt: system, context, instruction. Keeping them separate prevents context bleed - consistently outperforms stuffing everything into one message, especially with local models. I tested this properly one weekend - took the same batch of review tasks and ran them both ways. Splitting thi…code_taskBuilt for code analysis. Pre-configured system prompt with temperature and output constraints tuned per model family via the routing layer.code_task_filesLike `code_task`, but the local LLM reads files directly from disk — source never passes through the MCP client's context window. Use this when reviewing multiple related files, or a single large file that's awkward to paste. Files are read in parallel with `Promise.allSettled`, so one unreadable f…embedGenerate text embeddings via the OpenAI-compatible `/v1/embeddings` endpoint. Requires an embedding model to be available - Nomic Embed is a solid choice. Returns the vector, dimension count, and usage stats.discoverHealth check and speed readout. Returns model name, context window, capability profile, connection latency (labelled explicitly — this is the `/v1/models` fetch round-trip, *not* inference speed), and the active model's measured tok/s and TTFT averaged over the session. Before any real call has run…list_modelsLists everything on the LLM server - loaded and downloaded - with full metadata: architecture, quantisation, context window, capabilities, and HuggingFace enrichment data. Shows capability profiles describing what each model is best at, so Claude can make informed delegation decisions.statsCompact markdown dump of your offload stats — session and lifetime totals, per-model performance history, reasoning-token overhead — without the model catalog that `discover` prints. Cheap to call repeatedly to watch the 💰 counter climb.score_promptScore a prompt's quality across 8 dimensions BEFORE sending it to an expensive
model. Returns a 0-80 score, an A-F grade, the per-dimension breakdown
(clarity, specificity, context, constraints, output_format, role_definition,
examples, cot_structure), and the weakest dimension.
USE WHEN:
- The user is workshopping a prompt and asks "is this good?" / "will this
work?" / "should I add more detail?"
- The user is about to send a long or expensive prompt to GPT-4, Claude Opus,
or any frontier model, especially in a batch or automation context where
rework is costly.
- The user mentions iterating on a prompt that produced poor output and wants
to diagnose what's missing.
- The user pastes a prompt and asks for feedback on it.
DO NOT USE WHEN:
- The user is asking you to write a prompt for them (write it yourself first,
then optionally call score_prompt to verify).
- The prompt is conversational chat (this scores task-shaped prompts).
COST: Free, no API key required. Rate-limited per IP: 5/min, 10/day, 100/month.
If the user exceeds the limit, the response will include a structured upgrade
path with subscribe and account URLs.
LATENCY: ~2 seconds.optimize_promptRewrite a prompt to score higher on the PQS rubric, AND show before/after
output comparisons so the user can see the impact. Returns the optimized
prompt, the original PQS score, the optimized PQS score, and side-by-side
sample outputs from a frontier model using both versions.
USE WHEN:
- The user got a low score from score_prompt and asks how to improve.
- The user explicitly asks to "improve" / "rewrite" / "fix" / "optimize" a
prompt they pasted.
- The user is dissatisfied with output quality from a previous prompt and
asks how to get better results.
- score_prompt returned a suggestion to invoke this tool.
DO NOT USE WHEN:
- The user just asked for a score (use score_prompt only — don't double up).
- The user wants you to write a new prompt from scratch (write it directly).
REQUIRES: A PQS API key from a Pro subscription ($19.99/month, 1,000 calls/mo,
includes batch + A/B comparison). If the user has not provided one, the tool
returns a clear subscription URL — pass that response to the user verbatim.
Do not invent or guess API keys. There is no free trial of this tool; the
user must subscribe before the first call.
COST: Counted against your Pro subscription's monthly call quota.
LATENCY: ~6-8 seconds.Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"lm": {
"command": "npx",
"args": [
"-y",
"@houtini/lm"
],
"env": {
"HOUTINI_LM_ENDPOINT_URL": "YOUR_HOUTINI_LM_ENDPOINT_URL_HERE",
"HOUTINI_LM_API_KEY": "YOUR_HOUTINI_LM_API_KEY_HERE",
"HOUTINI_LM_MODEL": "YOUR_HOUTINI_LM_MODEL_HERE",
"HOUTINI_LM_SERIALISE": "YOUR_HOUTINI_LM_SERIALISE_HERE"
}
}
}
}
{
"mcpServers": {
"pqs-mcp-server": {
"command": "npx",
"args": [
"-y",
"pqs-mcp-server"
],
"env": {
"PQS_BASE": "YOUR_PQS_BASE_HERE"
}
}
}
}