lmstudio-agent-mcp
Allows web search via DuckDuckGo (no API key required), returning titles, URLs, and snippets.
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., "@lmstudio-agent-mcpsearch for Python web scraping tutorials"
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.
Agent MCP Server for LM Studio
Do not install 1.2.0 — it has an undeclared mcp>=1.0.0 dependency
that resolves to mcp 2.0.0, which renamed FastMCP to MCPServer
and broke every console script with
ModuleNotFoundError: No module named 'mcp.server.fastmcp'.
Use 1.2.1 or later (the mcp pin is now >=1.0.0,<2.0.0).
1.2.1 has been verified end-to-end in a fresh venv: install works,
all three console scripts start, and every tool responds correctly
over stdio MCP.
A lightweight MCP (Model Context Protocol) server that provides local agent capabilities for LM Studio: file I/O, terminal execution, multi-engine web search, persistent key/value memory, and a pluggable skill system.
📦 PyPI 1.2.1 —
pip install lmstudio-agent-mcp🔌 Auto-registers with LM Studio — no manual config editing required
🛠 11 tools, ~14 kB wheel, no heavy dependencies
Features
Tool | Description |
| Read text files with offset/limit pagination and encoding support |
| Write or append to files, with optional parent directory creation |
| Execute shell commands with pipes, redirections, custom working directory, environment variables, and configurable timeout |
| Search the web via DuckDuckGo, Bing, Google, or Baidu (switchable), returning titles, URLs, and snippets |
| Persist a key/value memory entry with category and tags |
| Load a single memory entry by key |
| List memory entries, optionally filtered by category/tag |
| Delete a single memory entry |
| Full-text search across key, value, and tags (substring or regex) |
| Discover skills available in the configured skills directory |
| Invoke a discovered skill (Python, shell, or markdown) |
Related MCP server: MCP Server Toolkit
Requirements
Python 3.10+
Dependencies listed in
requirements.txt
Installation
pip install lmstudio-agent-mcpAfter installation, three console scripts are available:
Script | Purpose |
| Start the MCP server ( |
| Register this server with LM Studio's |
| Print or write the LM Studio MCP config snippet |
Auto-registration with LM Studio
The package registers itself with LM Studio automatically — no copy/paste required.
Editable / source install — a setuptools
cmdclasshook appends anagent_mcpentry to~/.lmstudio/mcp.jsonimmediately after install.Wheel install (e.g. from PyPI) — the first time
lmstudio-agent-mcpstarts it writes the entry silently. To trigger the registration right after install run:lmstudio-mcp-setup
The function is idempotent: re-running it is a no-op. Pass --force to
overwrite an existing entry. To opt out, set the environment variable
LMSTUDIO_AGENT_NO_AUTOREGISTER=1 before starting the server.
A marker file ~/.lmstudio/.lmstudio_agent_mcp_installed is written next to
mcp.json so the registration is not repeated unnecessarily. The generated
snippet uses the installed lmstudio-agent-mcp console script as the command
so no Python interpreter path is baked in:
{
"mcpServers": {
"agent_mcp": {
"command": "/home/<you>/.local/bin/lmstudio-agent-mcp"
}
}
}To print or write the config snippet manually:
lmstudio-mcp-config
# with overrides:
lmstudio-mcp-config --python /path/to/python --skills-dir ~/my_skills --memory-file ~/my_memory.json
# write directly (merges into existing mcp.json if present):
lmstudio-mcp-config --write ~/.lmstudio/mcp.json
# use the python module form instead of the console script:
lmstudio-mcp-config --no-console-scriptOther install methods
# editable install (development)
git clone https://github.com/oemoem12/lmstudio-agent-mcp.git
cd lmstudio-agent-mcp
pip install -e .
# npm wrapper (thin shell around the Python package)
npm install -g lmstudio-agent-mcpUsage with LM Studio
Restart LM Studio after running lmstudio-mcp-setup. The server will appear in
the MCP list as agent_mcp. The CLI also generates a JSON snippet for
mcp.json automatically; if you prefer to add it by hand:
{
"mcpServers": {
"agent_mcp": {
"command": "/usr/bin/python3",
"args": ["-m", "lmstudio_agent_mcp"]
}
}
}The CLI automatically detects the current Python interpreter. Use --python to
override it (e.g. for a virtualenv) and --skills-dir / --memory-file to
customize where the server looks for skills and where it stores memory.
Usage with Other MCP Clients
The server uses stdio transport by default. Start it directly:
python3 -m lmstudio_agent_mcpFor remote access, switch to streamable HTTP:
import lmstudio_agent_mcp
lmstudio_agent_mcp.mcp.run(transport="streamable_http", port=8000)Configuration
The server reads the following environment variables on startup:
Variable | Default | Purpose |
|
| Path to the persistent memory store |
|
| Directory scanned for user-defined skills |
|
| Set to |
The skills directory also accepts SKILL.md (with optional scripts/,
reference/, etc. siblings) in addition to main.py / run.py directories.
Tool Reference
agent_read_file
Read the contents of a text file.
Parameter | Type | Default | Description |
| string | (required) | Absolute or relative path to the file |
| int |
| Number of lines to skip from the beginning |
| int | null |
| Maximum number of lines to return ( |
| string |
| Text encoding |
agent_write_file
Write text content to a file.
Parameter | Type | Default | Description |
| string | (required) | Absolute or relative path to the file |
| string | (required) | Text content to write |
| string |
| Text encoding |
| bool |
| If |
| bool |
| If |
agent_execute_command
Execute a terminal command.
Parameter | Type | Default | Description |
| string | (required) | Shell command to execute |
| string | null |
| Working directory (defaults to server cwd) |
| float |
| Maximum execution time in seconds (1-600) |
| object | null |
| Additional environment variables to set |
| bool |
| Execute through system shell (required for pipes/redirects) |
agent_web_search
Search the web using multiple search engines.
Parameter | Type | Default | Description |
| string | (required) | Search query (1-500 chars) |
| string |
| Search engine: |
| int |
| Maximum results to return (1-20) |
| string | null |
| Region/locale code (e.g. |
agent_memory_save
Persist a key/value memory entry to disk for cross-session recall.
Parameter | Type | Default | Description |
| string | (required) | Unique identifier (1-200 chars) |
| string | (required) | Content to remember |
| string |
| Logical bucket for filtering |
| string[] |
| Tags for retrieval filtering |
| bool |
| If |
agent_memory_load
Load a single memory entry by key.
Parameter | Type | Default | Description |
| string | (required) | Key of the entry to load |
agent_memory_list
List memory entries, optionally filtered by category and/or tag.
Parameter | Type | Default | Description |
| string | null |
| Restrict to one category |
| string | null |
| Restrict to entries carrying this tag |
| int |
| Maximum entries to return (1-1000) |
agent_memory_delete
Delete a single memory entry.
Parameter | Type | Default | Description |
| string | (required) | Key of the entry to delete |
agent_memory_search
Full-text search across key, value, and tags.
Parameter | Type | Default | Description |
| string | (required) | Substring or regex to search for (1-500 chars) |
| bool |
| Treat the query as a regular expression |
| string | null |
| Restrict the search to one category |
| int |
| Maximum matches to return (1-200) |
agent_list_skills
Discover skills available in the configured skills directory.
Parameter | Type | Default | Description |
| string | null |
| Override the skills directory |
| string | null |
| Glob pattern to filter skill names (e.g. |
agent_run_skill
Invoke a discovered skill by name.
Parameter | Type | Default | Description |
| string | (required) | Skill name (subdirectory or filename without extension) |
| string |
| Primary input passed as the first argument |
| object |
| Additional keyword arguments forwarded to the skill |
| string | null |
| Override the skills directory |
| float |
| Maximum execution time in seconds (1-600) |
Writing Skills
Place skills under the directory pointed to by LMSTUDIO_AGENT_SKILLS_DIR (default ~/.agents/skills/). Three skill types are supported:
Python skill (subdirectory)
skills/
└── summarize/
├── SKILL.md # optional description (first paragraph is used)
└── main.py # must define `def run(input, **kwargs)`# skills/summarize/main.py
def run(input: str, **kwargs) -> str:
max_words = int(kwargs.get("max_words", 50))
words = input.split()
return " ".join(words[:max_words])Python skill (single file)
# skills/translate.py
def run(input: str, **kwargs) -> str:
target = kwargs.get("target", "zh")
return f"[{target}] {input}"Shell skill
# skills/count_lines.sh (must be executable)
#!/usr/bin/env bash
echo "Lines: $(wc -l < "$1")"The input parameter becomes $1; args become additional positional arguments.
Markdown skill
<!-- skills/cheatsheet.md -->
# Cheatsheet
Useful commands ...A markdown skill simply returns the file contents when invoked.
Example: Memory + Skill Workflow
# 1) Save user preferences
agent_memory_save(key="user.lang", value="zh-CN", category="user", tags=["lang"])
# 2) Later, recall them
agent_memory_load(key="user.lang")
# 3) Run a custom skill
agent_run_skill(name="summarize", input="long text ...", args={"max_words": 20})Security Notes
File paths are resolved to absolute paths;
~expansion is supportedLarge files (>10 MiB) are rejected to prevent memory exhaustion
Command execution has a configurable timeout (max 600s)
The memory file is rewritten atomically (temp file + rename) to prevent corruption
Do not expose this server to untrusted clients —
agent_execute_commandandagent_run_skill(Python/shell) can run arbitrary code
License
MIT
Available Tools
11 toolsagent_execute_commandADestructive
Execute a terminal command and return stdout, stderr, and exit code.
The command runs in a subprocess. By default it is executed through the system shell so that pipes, redirections, and environment variables work. Use caution with untrusted input to avoid command injection.
Args: command: Shell command to execute. working_directory: Working directory for the command. timeout: Maximum execution time in seconds. env: Additional environment variables to set or override. shell: Execute the command through the system shell.
Returns: str: JSON string with keys 'success', 'command', 'exit_code', 'stdout', 'stderr', and 'timed_out'.
| Name | Required | Description | Default |
|---|---|---|---|
| env | No | Additional environment variables to set or override. | |
| shell | No | Execute the command through the system shell (required for pipes/redirects). | |
| command | Yes | Shell command to execute. Pipes and redirections are supported. | |
| timeout | No | Maximum execution time in seconds. | |
| working_directory | No | Working directory for the command. Defaults to the server process cwd. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true), the description reveals that the command runs in a subprocess via the system shell, that pipes/redirections are supported, and that care is needed to avoid command injection. The return format is also disclosed. This adds meaningful behavioral context beyond the annotation flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with clear sections (introduction, caution, Args, Returns). It is moderately concise, though the Args section duplicates schema descriptions. The security warning and shell behavior details justify the length, and no filler is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 params, annotations, and an output schema), the description covers all key aspects: execution model, shell behavior, security considerations, and return format. It does not explicitly describe timeout side-effects beyond the 'timed_out' return key, but this is minor given the output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% description coverage for all five parameters, including defaults and constraints. The description's Args section largely repeats this information without adding significant new semantics. Baseline of 3 is appropriate because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb+resource: 'Execute a terminal command and return stdout, stderr, and exit code.' It specifies the tool's scope as executing commands in a subprocess, which clearly differentiates it from sibling tools like agent_read_file or agent_web_search that handle files, memory, or web tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool (running terminal commands) and includes a security caution about untrusted input. However, it does not explicitly name alternatives or state when not to use it, though the sibling tools are distinct enough that the intended usage is evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_list_skillsARead-onlyIdempotent
Discover and list skills available in the configured skills directory.
A skill is one of:
<skills_dir>/<name>/main.py(orrun.py) with arun(input, **kwargs)function<skills_dir>/<name>.py— Python skill<skills_dir>/<name>.sh— Shell skill<skills_dir>/<name>.md— Markdown skill (returns the file contents)
Args: skills_dir: Override the skills directory. pattern: Optional glob pattern to filter skill names.
Returns: str: JSON with keys 'success', 'skills_dir', 'count', and 'skills'.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | No | Optional glob pattern to filter skill names (e.g. 'trans*'). | |
| skills_dir | No | Override the skills directory (defaults to LMSTUDIO_AGENT_SKILLS_DIR or ./skills). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds valuable context beyond those flags by enumerating accepted skill file formats and specifying the JSON return structure with keys success, skills_dir, count, and skills.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-organized: a one-sentence purpose, a bulleted list of skill types, and clearly labeled Args/Returns. Every sentence earns its place without redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only two optional parameters, a return shape already summarized, and rich annotation coverage, the description fully covers the tool's behavior, skill definitions, and expected output. The agent has everything needed to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description's Args section primarily restates what the input schema already says (override skills_dir, optional glob pattern). The description adds no new parameter semantics beyond the schema, yielding the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Discover and list skills available in the configured skills directory', a specific verb+resource statement. It clearly distinguishes this discovery tool from siblings like agent_run_skill or agent_read_file by defining what counts as a skill.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tool's purpose is clear from 'Discover and list skills', and the sibling set reinforces when to use it (e.g., before running a skill with agent_run_skill). However, it does not explicitly state when not to use it or name alternative tools, so it stops short of full usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_memory_deleteADestructiveIdempotent
Delete a single memory entry by key.
Args: key: Key of the memory entry to delete.
Returns: str: JSON with keys 'success', 'key', and 'deleted' (bool).
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Key of the memory entry to delete. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive and idempotent hints. The description adds value by specifying that a single entry is deleted and by disclosing the return format (JSON with 'success', 'key', and 'deleted' bool), providing more behavioral context than the annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise and well-structured: one clear purpose sentence followed by an Args/Returns breakdown. Every sentence contributes essential information, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter destructive tool, the description is nearly complete: it states the action, the parameter, and the return format. The destructive hint in annotations covers the safety profile. It could be slightly more explicit about behavior on missing keys, but the 'deleted' bool in the return implies this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers the sole parameter 'key' with a description identical to that in the tool description (100% coverage). The description adds no new information about the parameter beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Delete a single memory entry by key', which is a specific verb+resource pair that clearly distinguishes this from siblings like save, load, list, and search. It unambiguously states the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (to delete a specific memory entry) but provides no explicit guidance on when to choose this over alternatives, nor any exclusions or prerequisites. Usage is inferred from the verb and resource.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_memory_listARead-onlyIdempotent
List memory entries, optionally filtered by category and/or tag.
Args: category: Only return entries in this category. tag: Only return entries carrying this tag. limit: Maximum number of entries to return.
Returns: str: JSON with keys 'success', 'count', and 'entries'.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Only return entries carrying this tag. | |
| limit | No | Maximum number of entries to return. | |
| category | No | Only return entries in this category. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds behavioral context by specifying the return format ('JSON with keys success, count, entries') and the filtering behavior, going beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-sentence summary followed by a brief Args list and Returns line. Every sentence is relevant, and the format is immediately scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the presence of an output schema, and thorough annotations, the description is complete. It communicates the core operation, optional filters, and return format, leaving no major gaps for an agent to make mistakes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with each parameter already described in the schema. The description's Args section repeats the same descriptions verbatim, adding no new meaning. The only additional context is the overall 'optionally filtered' phrase, which applies to the tool as a whole rather than individual parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'List memory entries, optionally filtered by category and/or tag,' which is a specific verb+resource combination. This distinguishes it from sibling tools like agent_memory_search (which likely performs semantic search) and agent_memory_load (which loads a specific entry).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used for listing entries with optional filters, but it does not explicitly differentiate when to use this versus agent_memory_search or agent_memory_load. There is no mention of exclusions or alternative tools, so the guidance is only implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_memory_loadARead-onlyIdempotent
Load a single memory entry by key.
Args: key: Key of the memory entry to load.
Returns: str: JSON with keys 'success', 'key', and the full entry payload.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Key of the memory entry to load. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, covering the safety profile. The description adds the return format (JSON with 'success', 'key', and payload), which is useful. However, it does not mention behavior on missing keys or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-line purpose followed by Args and Returns sections. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one simple parameter, full schema coverage, annotations, and a return description, the tool is sufficiently documented. The only gap is error behavior, but given the simplicity and presence of output schema, it is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully covers the single 'key' parameter with a description identical to the tool description. No additional semantic meaning is provided beyond what the schema already has, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool loads a single memory entry by key, using a specific verb and resource. It distinguishes itself from sibling memory tools (save, list, delete, search) by focusing on loading one entry.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given on when to use this tool versus alternatives like agent_memory_search or agent_memory_list. The description is minimal and leaves selection to the agent without mentioning exclusions or preferred use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_memory_saveAIdempotent
Persist a key/value memory entry to disk for cross-session recall.
Each entry stores: key, value, category, tags, created_at, updated_at. Memory is kept in a JSON file and is safe to read concurrently.
Args: key: Unique identifier for the entry. value: Content to remember. category: Logical bucket for the entry. tags: Optional list of tags for retrieval filtering. overwrite: If False, fail when the key already exists.
Returns: str: JSON with keys 'success', 'key', 'category', 'tags', 'operation' ('created' or 'updated').
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Unique key to identify this memory entry. | |
| tags | No | Optional list of tags for retrieval filtering. | |
| value | Yes | Content to remember. | |
| category | No | Logical bucket for the entry (e.g. 'user_preference', 'project_note'). | general |
| overwrite | No | If False, fail when the key already exists. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond annotations: storage in a JSON file, safe concurrent reads, and the overwrite parameter's failure condition. It also clarifies the operation type ('created' or 'updated'). This complements the idempotentHint and destructiveHint annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening purpose, a brief data model note, and labeled sections for Args and Returns. The 'Each entry stores' sentence is slightly redundant but harmless. It is concise enough while providing necessary details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full input schema, annotations, and an output schema, the description covers the core behavior, persistence model, parameter semantics, and return format. It explains the overwrite edge case and operation result. This is complete enough for an agent to invoke the tool correctly without needing additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema describes all five parameters with 100% coverage. The description's Args section essentially repeats the schema text without adding new meaning. Since schema coverage is high, the baseline of 3 applies, and the description doesn't elevate it further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb+resource+outcome: 'Persist a key/value memory entry to disk for cross-session recall.' This clearly differentiates it from sibling tools like load, search, or delete. The purpose is unmistakable and avoids ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for cross-session recall' implies the appropriate context for using this tool. It doesn't explicitly name alternatives or exclusions, but the sibling tool names (load, search, delete) make the complementary usage clear. The guidance is implicit but sufficient for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_memory_searchARead-onlyIdempotent
Search memory entries by substring or regex across key, value, and tags.
Args: query: Substring or regex to look for. use_regex: Treat the query as a regular expression. category: Restrict the search to a single category. limit: Maximum number of matches to return.
Returns: str: JSON with keys 'success', 'count', and 'matches'.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of matches to return. | |
| query | Yes | Substring or regex to look for in keys, values, and tags. | |
| category | No | Restrict the search to a single category. | |
| use_regex | No | Treat the query as a regular expression. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds value by specifying the return format (JSON with 'success', 'count', 'matches') and the search scope across key, value, and tags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a leading sentence, Args, and Returns sections. The Args section is somewhat redundant with the schema, but the format is clean and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all essential aspects for a search tool: query semantics, parameter behavior, and return format. With an output schema present, return values need not be explained, yet they are, making the description complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The Args block in the description repeats the same information without adding extra meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Search memory entries by substring or regex across key, value, and tags.' It clearly distinguishes from sibling tools like agent_memory_list and agent_memory_load.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool (searching memory entries) without explicitly naming alternatives or exclusions. It is obvious that this is the search variant among the memory tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_read_fileARead-onlyIdempotent
Read the contents of a text file.
Returns a JSON object with the file path, requested offset/limit, and the lines that were read. Large files are capped at MAX_FILE_SIZE bytes.
Args: path: Absolute or relative path to the file. offset: Number of lines to skip from the beginning. limit: Maximum number of lines to return (null = unlimited). encoding: Text encoding to use.
Returns: str: JSON string with keys 'success', 'path', 'offset', 'limit', 'total_lines', 'truncated', and 'content'.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute or relative path to the file to read. | |
| limit | No | Maximum number of lines to return (null = unlimited). | |
| offset | No | Number of lines to skip from the beginning. | |
| encoding | No | Text encoding to use when reading the file. | utf-8 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and idempotent. The description adds valuable context: files are capped at MAX_FILE_SIZE, the tool returns a JSON object with specific keys, and offset/limit control line selection. This goes beyond simple safety hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections for purpose, arguments, and returns. It is front-loaded with the primary action. While the Args section duplicates schema information, it is not overly verbose and every part serves a purpose, making it reasonably concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and annotations are present, the description covers essential behavioral details: MAX_FILE_SIZE cap, JSON return structure, and parameter semantics. It does not elaborate on error cases or exact MAX_FILE_SIZE value, but for a simple read tool this is sufficient and complete enough for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage of all four parameters with descriptions. The description's 'Args' section largely repeats the schema, adding no new semantic information beyond what the schema already states. Baseline of 3 is appropriate given full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Read the contents of a text file' with a specific verb and resource. It also outlines the return format and key parameters (path, offset, limit, encoding), making it easy to distinguish from sibling tools like agent_write_file or agent_execute_command.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly mention when to use this tool versus alternatives. Usage is implied by the name and description (reading text files), but there is no guidance on exclusions or when to prefer a different sibling tool, such as agent_execute_command.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_run_skillADestructive
Invoke a discovered skill by name and return its result.
Python skills are imported in-process and their run(input, **kwargs)
function is called. Shell skills are executed via subprocess. Markdown
skills simply return the file contents.
Args: name: Skill name. input: Primary input passed to the skill as the first argument. args: Additional keyword arguments forwarded to the skill. skills_dir: Override the skills directory. timeout: Maximum execution time in seconds.
Returns: str: JSON with keys 'success', 'name', 'type', 'stdout', 'stderr', 'exit_code', and 'timed_out'.
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | Additional keyword arguments forwarded to the skill. | |
| name | Yes | Skill name (subdirectory or file basename without extension). | |
| input | No | Primary input passed to the skill as the first argument. | |
| timeout | No | Maximum execution time in seconds. | |
| skills_dir | No | Override the skills directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=true), the description adds valuable details about execution mechanisms: Python skills run in-process, shell skills via subprocess, and markdown skills return file contents. It also discloses the return format and timeout behavior. It doesn't explicitly warn about side effects, but the destructive hint covers that, so the additional execution context earns a 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and concise: a clear opening, a brief explanation of skill types, an Args list, and a Returns section. Every sentence contributes useful information without unnecessary fluff, making it easy for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 5 parameters, an output schema, and annotations, the description covers all necessary aspects: it explains the skill execution model, the meaning of each parameter (already in schema), and the return JSON structure. It also accounts for edge cases like timeout with the 'timed_out' key. There is no obvious missing information that would hinder correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description's Args section largely repeats the schema descriptions (e.g., 'Primary input passed to the skill as the first argument' matches the schema exactly). It adds no new semantic nuance beyond what the schema provides, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Invoke a discovered skill by name and return its result', which is a specific verb+resource pair that clearly identifies the tool's function. It also differentiates from sibling tools by focusing on skills rather than commands, files, memory, or web search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool: when a skill is discovered. It explains the three skill types and their execution methods, which helps the agent understand what will happen. However, it does not explicitly state alternatives or exclusion criteria, such as 'For raw shell commands, use agent_execute_command', so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_web_searchARead-onlyIdempotent
Search the web using the specified search engine and return results.
Supported engines: duckduckgo (default), bing, google, baidu. Each result contains a title, URL, and short snippet. No API key is required.
Args: query: Search query string. engine: Search engine to use. num_results: Maximum number of results to return. region: Optional region/locale code for search results.
Returns: str: JSON string with keys 'success', 'query', 'engine', and 'results'.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query string. | |
| engine | No | Search engine to use: 'duckduckgo', 'bing', 'google', or 'baidu'. | duckduckgo |
| region | No | Optional region/locale code for search results (e.g. 'wt-wt', 'us-en', 'zh-cn'). | |
| num_results | No | Maximum number of results to return. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds value by disclosing the supported engines, the return format (JSON string with keys), and the lack of API key requirement. This goes beyond the annotations, though it does not cover rate limits or failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: engine list, result format, args, and returns. Every sentence provides useful information without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a web search tool: it lists all parameters, supported engines, result structure, and output format. The output schema further clarifies returns, and the description aligns with it. No missing essential context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage of parameter descriptions, including examples for region. The description's Args section largely mirrors the schema without adding meaningful new semantics, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches the web and returns results, with a specific verb ('Search'), resource ('web'), and explicit support for multiple engines. This distinguishes it from sibling tools like file/memory/command operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context ('Search the web') and mentions that no API key is required, which is helpful. However, it does not explicitly state when to prefer this over alternatives or when not to use it, though such guidance is not critical given the distinct purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_write_fileADestructive
Write text content to a file, optionally creating parent directories.
Args: path: Absolute or relative path to the file. content: Text content to write. encoding: Text encoding to use. append: If True, append to the file instead of overwriting. create_dirs: If True, create parent directories when they do not exist.
Returns: str: JSON string with keys 'success', 'path', 'bytes_written', and 'operation' ('append' or 'overwrite').
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute or relative path to the file to write. | |
| append | No | If True, append to the file instead of overwriting. | |
| content | Yes | Text content to write to the file. | |
| encoding | No | Text encoding to use when writing the file. | utf-8 |
| create_dirs | No | If True, create parent directories when they do not exist. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral traits: append vs. overwrite behavior, optional parent directory creation, and the return format (JSON string with success, path, bytes_written, operation). These add value beyond the annotations (which already mark the tool as destructive and not read-only). There is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main action and structured with Args/Returns sections, which aids readability. However, the Args block duplicates the schema's parameter descriptions verbatim, adding redundancy. While not overly long, the repetition prevents a higher score for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is quite complete for a file-writing tool. It covers the operation, parameters, defaults, and return value. An output schema exists, so return data is further specified. Missing elements like error handling or permissions are not critical for this context. The main gap is the lack of usage guidance, but that is already scored under dimension 2.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters. The description's Args section largely repeats this information (parameter names, defaults, and brief explanations) without adding new semantic detail. Thus, it earns the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Write text content to a file, optionally creating parent directories.' This is a specific verb+resource combination that distinguishes it from sibling tools like reading, executing commands, or memory operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention scenarios where file writing is preferable to other operations, nor does it mention any exclusions or prerequisites. The only implied usage is 'writing text to files,' but no explicit context or alternative comparisons are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct action and resource: memory operations (load/save/list/delete/search) are clearly separated, file read/write are distinct, command execution, web search, and skill management (list/run) are all unique. No two tools overlap in purpose.
All tools follow the consistent pattern agent_<verb>_<noun> (e.g., memory_load, read_file, web_search). The verb-noun structure is uniform and predictable across file, memory, and skill operations.
11 tools is well within the optimal range; the server's broad scope (memory, files, commands, web, skills) justifies each tool, with no redundancy or bloat.
The memory subsystem has full CRUD plus search; file read/write covers typical text I/O; command execution and web search cover external interactions; skill discovery/execution is complete. Minor gaps like file delete/list exist but are not critical for the toolkit's purpose.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Provides capabilities that let LLM agents perform a range of infrastructure management tasks.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Let ChatGPT, Claude & Cursor use your Mac: email, calendar, iMessage, Teams, files. Local, free.
Your org's AI agents, tasks, runs, search, and brain files as MCP tools and resources.
Related MCP Servers
- AlicenseBqualityBmaintenanceProvides coding agent capabilities including file operations, terminal commands, search functionality, and utility operations.27175MIT
- AlicenseAqualityCmaintenanceProvides filesystem, web search, SQLite, and system tools for AI assistants like Claude, enabling secure access to local resources and the web.6MIT
- AlicenseAqualityBmaintenanceProvides LLMs with local filesystem operations (read/write files, list directories) and command execution via MCP, enabling file management and task automation within AI clients.715ISC
- FlicenseCqualityDmaintenanceEnables MCP clients to interact with local LLMs via LM Studio, supporting dynamic chat, vision, RAG, file interaction, and model orchestration.28
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/oemoem12/lmstudio-agent-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server