A side-by-side look at the Lm and Cloudflare Workers AI MCP 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 Cloudflare Workers AI MCP 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.list_models, chat_completion, embed_text.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Conversational AI | Conversational AI |
| Quality signal | 61/100 · Good | 59/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 | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | 121 | 0 |
| Directory activity | 0 views 0 installs 0 upvotes | 2 views 0 installs 0 upvotes |
| Tools | 8 | 4 |
| Full listing | View Lm | View Cloudflare Workers AI MCP |
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.list_modelsList the Cloudflare Workers AI models supported by this server. Use this tool to discover available model ids before calling chat_completion, embed_text, or generate_image — it returns the complete catalog of chat models, embedding models, and image models with their roles. This tool does not call the Cloudflare API and works without credentials.chat_completionRun an LLM chat completion using Cloudflare Workers AI. Use this tool when you need direct LLM inference with an explicit message list (system/user/assistant roles) — for example summarization, translation, Q&A, classification, or code generation. The request is sent to the Workers AI OpenAI-compatible endpoint and the full assistant reply is returned as a single text block together with the model id and finish reason. No streaming is performed. Requires CLOUDFLARE_ACCOUNT_ID and CLOUDFLARE_API_TOKEN environment variables; costs are billed to your Cloudflare account (free tier available).embed_textGenerate numerical vector embeddings for one or more text inputs using Cloudflare Workers AI. Use this tool when you need semantic vector representations of text — for example similarity search, clustering, deduplication, or retrieval-augmented generation. Returns one embedding array (384-dimensional for BGE small, 768 for BGE base) per input text, in the same order as the inputs. Embeddings are generated by the native Workers AI endpoint and are deterministic for identical inputs. Requires CLOUDFLARE_ACCOUNT_ID and CLOUDFLARE_API_TOKEN environment variables.generate_imageGenerate an image from a text prompt using Cloudflare Workers AI (Flux 1 Schnell). Use this tool when the user asks for a picture, illustration, concept art, or visual asset — e.g. logos, scene descriptions, thumbnails, or design mockups. The image is generated by the Flux 1 Schnell model on Workers AI and returned as a base64-encoded string; decode it to obtain the image file (PNG or JPEG depending on the model output). Generation is asynchronous and typically takes a few seconds. Note: Cloudflare applies content moderation — prompts containing NSFW content are rejected with an error. Requires CLOUDFLARE_ACCOUNT_ID and CLOUDFLARE_API_TOKEN environment variables.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": {
"puspoaditya-cloudflare-workers-ai-mcp": {
"command": "npx",
"args": [
"-y",
"@puspoaditya/cloudflare-workers-ai-mcp"
]
}
}
}