mcptools
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., "@mcptoolssearch the web for latest AI 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.
web-tools-mcp-server (mcptools)
An all-in-one MCP server for local LLMs (Gemma, gpt-oss, Qwen, etc. via LM Studio, Ollama, or any MCP client). It gives a model the capabilities small local models lack: live web access, precise math, the current date, shell + code execution, filesystem and SQLite access, a persistent memory, and semantic search (RAG) over your own files using LM Studio embeddings.
Transport: stdio (local).
Config:
~/.config/mcptools/config.json(auto-created on first run).No cloud keys required — search is Mojeek, weather is open-meteo, embeddings are your local LM Studio.
37 tools in 10 config-gated groups.
Table of contents
Related MCP server: MCP Server
Tools (37, in 10 groups)
Group | Tools | Notes |
web |
| Mojeek; HTML→text/markdown |
compute |
| mathjs; IANA timezones |
system |
| unrestricted, timeout-guarded; python/node/bash |
files |
| grep/glob/exact + line-based edits without shell quoting; PDF→JSON; binary-safe downloads |
data |
| any local |
knowledge |
| keyless |
feeds |
| keyless live sources |
memory |
| persistent SQLite at |
tasks |
| persistent checklist at |
rag |
| embeddings via LM Studio; vectors in |
⚠️ Security:
run_command,execute_code,write_file,edit_file,download_fileand unrestricted filesystem access run with your user's full privileges (only timeouts, no sandbox — as configured). Run this server only with clients/models you trust, or disable those groups in the config (see Configuration).
Tool reference
Every tool returns human-readable text plus structuredContent for programmatic
clients. Responses are capped to limits.characterLimit and truncated with a note.
web
Tool | Key arguments | Returns |
|
| Ranked results: title, url, snippet |
|
| Cleaned page content (scripts/nav stripped) |
|
| Absolute links with anchor text |
|
| title, description, canonical, OpenGraph |
|
| status, headers, body (any REST API) |
compute
Tool | Key arguments | Returns |
|
| mathjs result (functions, constants, units) |
|
| ISO + human time + unix seconds |
system
Tool | Key arguments | Returns |
|
| File contents, pageable with line numbers (PDFs auto-detected, text extracted per page) |
|
| Bytes written (creates parent dirs) |
|
| Entries with type + size |
|
| exit code, stdout, stderr (system shell) |
|
| exit code, stdout, stderr |
|
| Desktop notification via |
| — | mcptools version, enabled/disabled groups, config + data paths |
files
Tool | Key arguments | Returns |
|
| Matches as |
|
| Matching paths with sizes |
|
| Exact in-place replacement (errors if not found / ambiguous); returns edited region |
|
| Line-based edits (use |
|
| PDF as JSON: metadata + per-page text (write to file for big PDFs, then |
|
| Binary-safe download to disk (pairs with |
data
Tool | Key arguments | Returns |
|
| Rows (SELECT) or change count |
|
| Matching slice as JSON |
knowledge
Tool | Key arguments | Returns |
|
| Article title, summary, url |
|
| Current conditions + daily forecast |
feeds
Tool | Key arguments | Returns |
|
| Feed items: title, link, date, summary (RSS 2.0 + Atom) |
|
| Stories with points, comments, discussion link (Algolia, keyless) |
|
| Papers with abstract + |
|
| Full caption transcript as text |
memory
Tool | Key arguments | Returns |
|
| Confirmation (upsert) |
|
| Matching notes |
| — | All keys with tags + timestamps |
|
| Confirmation |
tasks
Tool | Key arguments | Returns |
|
| New task id |
|
| Checklist with ids |
|
| Marks done (or deletes with |
rag
Tool | Key arguments | Returns |
|
| Files + chunks indexed (skips on backend error) |
|
| Ranked passages with source + score |
Install & build
cd ~/Code/mcptools
npm install
npm run build # compiles to dist/Requires Node ≥ 22 (uses the built-in node:sqlite). python3 is needed
for execute_code with language: "python".
Run
node dist/index.js # speaks MCP over stdioThe first run writes a default ~/.config/mcptools/config.json.
Register with a client
Install script (recommended)
npm run install:claude # Claude Code (~/.claude.json, user scope)
npm run install:opencode # OpenCode (~/.config/opencode/opencode.json)
npm run install:all # bothMerges the mcptools entry into the client's user-level config (everything
else in the file is preserved; re-running updates the entry in place). Build
first — the script points the client at dist/index.js.
Claude Code (manual)
claude mcp add mcptools -- node ./dist/index.jsOpenCode
Add to ~/.config/opencode/config.json (global) or a project opencode.json,
under the mcp key:
{
"mcp": {
"mcptools": {
"type": "local",
"command": ["node", "./dist/index.js"],
"enabled": true
}
}
}Restart OpenCode (or start a new session) to spawn the server. Verify with
/mcp inside OpenCode, or list tools from the TUI.
Generic MCP client (mcpServers JSON)
{
"mcpServers": {
"mcptools": {
"command": "node",
"args": ["./dist/index.js"]
}
}
}💡 Small local models choose tools more reliably with fewer of them. If 37 tools is too many for your model, disable groups in the config rather than the client — see below.
Configuration (~/.config/mcptools/config.json)
{
"groups": { // turn whole tool groups on/off
"web": true, "compute": true, "system": true, "data": true,
"knowledge": true, "memory": true, "rag": true
},
"tools": { // per-tool overrides win over group, e.g.:
// "run_command": false,
// "write_file": false
},
"limits": {
"timeoutMs": 30000, // network/exec timeout
"characterLimit": 25000, // max chars per tool response
"maxOutputBytes": 1000000 // max bytes captured from a process/file/fetch
},
"lmstudio": {
"baseUrl": "http://localhost:1234/v1",
"embeddingModel": "text-embedding-nomic-embed-text-v1.5"
},
"paths": { "dataDir": "~/.config/mcptools" }
}Per-tool overrides (
tools) take precedence over the group switch.Hot env overrides:
MCPTOOLS_LMSTUDIO_URL,MCPTOOLS_EMBED_MODEL.For a safe, read-only-ish profile set
"system": false(and optionally"data": false) ingroups.
A copy of the defaults lives in config.example.json.
RAG / LM Studio
rag_index and rag_search call LM Studio's OpenAI-compatible
/v1/embeddings endpoint. Start LM Studio, load an embedding model, and make
sure its id matches lmstudio.embeddingModel.
⚠️ Embedding model crashing on GPU — load it on CPU
Observed with text-embedding-nomic-embed-text-v1.5: the model crashes
mid-request ("The model has crashed... Exit code: null") and then fails to reload
("unable to allocate CUDA0 buffer"). Root cause is GPU/CUDA, not the input —
the same chunks embed fine on CPU. This tiny (~84 MB) model runs fast on CPU.
Load it CPU-only (the lms CLI is the only place that sets the GPU layer-offload
ratio — the REST API does not):
~/.lmstudio/bin/lms unload --all
~/.lmstudio/bin/lms load text-embedding-nomic-embed-text-v1.5 --gpu off -yLoads in ~0.5 s and embeds reliably. An explicitly-loaded model has no TTL and stays resident until LM Studio restarts, so JIT won't reload it on the GPU.
Persisting it (headless / no GUI). The GUI "per-model default" is the correct knob and applies to JIT loading, but LM Studio only writes it from the GUI (into an undocumented internal file — don't hand-edit it). Headless options:
Run the
lms load ... --gpu offcommand at login (e.g. asystemd --useroneshot unit, or append it to your existing~/.lmstudio/load-optimized.sh).Or just run it once per LM Studio session before using RAG.
If you have the GUI on another machine: My Models → ⚙️ → set GPU offload = 0.
Defensive hardening (any backend)
Inputs are embedded one at a time (batched array input crashes some backends).
Each embed call retries with backoff.
rag_indexskips any chunk that still fails and reports the count, instead of aborting the whole index.
Development
npm run dev # tsx watch (no build step)
npm run build # type-check + compile
npm run clean # remove dist/Project layout:
src/
index.ts entry: load config, register enabled tools, stdio
config.ts config load/merge + defaults (~/.config/mcptools)
registry.ts group/tool enable gating
types.ts shared types
services/ search (mojeek), lmstudio (embeddings), vectorstore
tools/ web, compute, system, data, knowledge, memory, rag
util/ http, html, exec, sqlite, format, errorsData files created at runtime under paths.dataDir (default
~/.config/mcptools): config.json, memory.db, rag.db.
This server cannot be installed
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
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/highercomve/mcptools'
If you have feedback or need assistance with the MCP directory API, please join our Discord server