Skip to main content
Glama

TOOL4LM — Multi-Tool MCP Server for Local LMs

Node.js TypeScript License: MIT

All-in-one tools to supercharge your local or remote LLMs.
Search smarter. Calculate faster. Summarize better.

TOOL4LM là một MCP (Model Context Protocol) server viết bằng Node.js/TypeScript giúp bổ sung công cụ cho các mô hình ngôn ngữ chạy cục bộ (LM Studio/Ollama/…): web search, đọc & tóm tắt trang, tìm & đọc tài liệu nội bộ, tra cứu học thuật, và máy tính. Không cần API key mặc định.


✨ Tính năng

  • 🔎 Web Search: tìm nhiều nguồn (SearXNG + DuckDuckGo HTML), khử trùng lặp, trả về tiêu đề + URL + snippet.

  • 🌐 Web Fetch/Read: tải trang có giới hạn kích thước/thời gian (chống SSRF) và trích văn bản “đọc được” để tóm tắt.

  • 📂 Doc Search/Read: tìm & đọc tài liệu trong thư mục sandbox (txt/md/html/pdf). PDF dùng pdf-parse (lazy-load).

  • 📚 Scholar Search/Get: tra cứu học thuật (arXiv + Crossref + Wikipedia) và lấy metadata theo DOI/arXivId.

  • 🧮 Calculator: đánh giá biểu thức với mathjs, hỗ trợ precision (làm tròn).


Related MCP server: free-search-mcp

🧰 Tool & tham số (tên chính ⇄ alias gạch dưới)

Tool

Khi nào dùng

Tham số (shape)

calc.eval ⇄ calc_eval

Tính toán cục bộ

{ expr: string, precision?: number }

web.search ⇄ web_search

Tìm web đa engine

{ q: string, max?: number, lang?: string, site?: string, engines?: string[], k?: number, limit?: number }

web.fetch ⇄ web_fetch

Tải 1 URL (HTML/binary)

{ url: string, timeout?: number, max_bytes?: number, headers?: Record<string,string> }

web.read ⇄ web_read

Trích văn bản “đọc được”

{ url: string, html?: string }

doc.find ⇄ doc_find

Tìm trong thư mục sandbox

{ q: string, top?: number, limit?: number }

doc.read ⇄ doc_read

Đọc 1 file trong sandbox

{ path: string }

index.build ⇄ index_build

Build chỉ mục tài liệu

{ root?: string }

sch.search ⇄ sch_search

Tìm bài/paper/DOI

{ q: string, top?: number, limit?: number }

sch.get ⇄ sch_get

Lấy metadata paper

{ doi?: string, arxivId?: string, url?: string }

wiki.search ⇄ wiki_search

Tìm tiêu đề Wikipedia

{ q: string, lang?: string }

wiki.get ⇄ wiki_get

Lấy summary Wikipedia

{ title: string, lang?: string }

Đã bật openWorldHint nên nếu model lỡ thêm field lạ host vẫn chấp nhận; nhưng khuyến nghị dùng đúng tham số như bảng để ổn định.


🔧 Cài đặt & chạy

npm install
npm run build
npm start

Khi chạy thành công sẽ in:
[TOOL4LM] started. Sandbox: <đường_dẫn_sandbox>


⚙️ Cấu hình MCP (LM Studio)

Thêm vào mcp.json của LM Studio:

{
  "mcpServers": {
    "TOOL4LM": {
      "command": "node",
      "args": ["--enable-source-maps", "C:/path/to/tool4lm/dist/server.js"],
      "type": "mcp",
      "env": {
        "SANDBOX_DIR": "C:/path/to/your_docs",
        "SEARXNG_ENDPOINTS": "https://searx.be/search,https://searx.tiekoetter.com/search",
        "ENGINE_ORDER": "searxng,duckduckgo",
        "LANG_DEFAULT": "vi",
        "REGION_DEFAULT": "vn",
        "MAX_FETCH_BYTES": "1048576",
        "FETCH_TIMEOUT_MS": "8000"
      }
    }
  }
}

Trên Windows, nên dùng / trong JSON để tránh escape \.


📝 Ví dụ luồng sử dụng

Tra cứu web có trích dẫn → web.search → web.fetch → web.read → tóm tắt + đính kèm URL.
Tài liệu nội bộ → doc.find → doc.read → tóm tắt + trích đoạn (ghi kèm path).
Học thuật → sch.search → sch.get theo DOI/arXivId.
Tính toán → calc.eval với ^/pow(a,b) (hoặc đã normalize **).


🌍 Biến môi trường

  • SANDBOX_DIR — thư mục tài liệu (mặc định: ./sandbox).

  • SEARXNG_ENDPOINTS — danh sách endpoint /search của SearXNG, cách nhau dấu phẩy.

  • ENGINE_ORDER — ví dụ searxng,duckduckgo.

  • LANG_DEFAULT, REGION_DEFAULT — gợi ý ngôn ngữ/khu vực khi tìm web.

  • MAX_FETCH_BYTES — giới hạn dung lượng tải trang.

  • FETCH_TIMEOUT_MS — timeout tải trang (ms).


🤝 Đóng góp

Issues/PRs rất hoan nghênh! Nếu thấy bug/đề xuất, mở issue giúp mình nhé.


📜 Giấy phép

MIT


☕ Ủng hộ

Nếu bạn thấy dự án hữu ích, có thể ủng hộ mình qua PayPal:

Donate with PayPal

hoặc bấm nút bên dưới:

Available Tools

22 tools
calc.evalB

Evaluate math expression (no external calls).

Inputs: expr (required), precision.

calc_evalD

Alias of calc.eval

Inputs: expr (required), precision.

doc.findB

Search local documents within sandbox directory. Builds index if missing.

Inputs: q (required), top, limit.

doc_findD

Alias of doc.find

Inputs: q (required), top, limit.

doc.readA

Read a file from sandbox directory (text or pdf).

Inputs: path (required).

doc_readD

Alias of doc.read

Inputs: path (required).

index.buildC

Build MiniSearch index for documents in sandbox directory.

Inputs: root.

index_buildD

Alias of index.build

Inputs: root.

sch.getC

Get scholarly metadata by DOI/arXivId/URL.

Inputs: doi, arxivId, url.

sch_getD

Alias of sch.get

Inputs: doi, arxivId, url.

sch.searchA

Academic-first search (arXiv + Crossref + Wikipedia).

Inputs: q (required), top, limit.

web.fetchB

Fetch a URL with size/time limits and anti-SSRF.

Inputs: url (required), timeout, max_bytes, headers.

web_fetchD

Alias of web.fetch

Inputs: url (required), timeout, max_bytes, headers.

web.readA

Extract readable content from given HTML (or pass html from web.fetch).

Inputs: url (required), html.

web_readD

Alias of web.read

Inputs: url (required), html.

web.searchB

Multi-engine web search (SearXNG + DuckDuckGo HTML).

Inputs: q (required), max, lang, site, +3 more.

wiki.getC

Wikipedia summary by title.

Inputs: title (required), lang.

wiki_getD

Alias of wiki.get

Inputs: title (required), lang.

wiki.searchC

Wikipedia title search (public API).

Inputs: q (required), lang.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.6/5.0

    Scored across 22 tools

    Disambiguation5/5

    Each unique operation has a distinct prefix and action (e.g., calc.eval, sch.search, web.fetch). Aliases are exact duplicates and do not create functional ambiguity. An agent can easily distinguish between different domains and operations.

    Naming Consistency4/5

    The original tools consistently use a domain.action pattern (e.g., calc.eval). However, the aliases switch to domain_action (e.g., calc_eval), introducing a minor inconsistency. The core pattern is clear, but the presence of both slightly reduces consistency.

    Tool Count4/5

    22 tools nominally, but effectively 11 unique operations due to aliases. This is reasonable for a server covering multiple domains (math, docs, search, web, wiki). The alias redundancy is minor and does not overwhelm the surface.

    Completeness4/5

    The tool set covers key operations for each domain: calculation, document indexing/reading, scholarly and web search, Wikipedia retrieval. Missing write/update operations (e.g., doc.write, wiki.edit) but these are likely out of scope for a LM-assistance tool server.

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      An MCP server that enables web searching, URL content extraction, and summarization without requiring API keys. It also provides advanced mathematical evaluation and multi-language Wikipedia summary retrieval tools.
      5
      532 npm
      10
      MIT
    • F
      license
      A
      quality
      D
      maintenance
      An all-in-one MCP server for local LLMs that provides live web access, math, shell/code execution, filesystem access, memory, and RAG over local files using LM Studio embeddings.
      2
      39
      -
    • A
      license
      Not graded
      quality
      C
      maintenance
      Zero-auth multi-source research MCP server that enables web search, reading URLs, PDFs, GitHub repos, and querying Hacker News, Stack Overflow, Semantic Scholar, and YouTube transcripts without API keys.
      61 PyPI
      12
      Apache 2.0