Skip to main content
Glama
oemoem12

lmstudio-agent-mcp

by oemoem12

Agent MCP Server for LM Studio

WARNING

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.1pip 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

agent_read_file

Read text files with offset/limit pagination and encoding support

agent_write_file

Write or append to files, with optional parent directory creation

agent_execute_command

Execute shell commands with pipes, redirections, custom working directory, environment variables, and configurable timeout

agent_web_search

Search the web via DuckDuckGo, Bing, Google, or Baidu (switchable), returning titles, URLs, and snippets

agent_memory_save

Persist a key/value memory entry with category and tags

agent_memory_load

Load a single memory entry by key

agent_memory_list

List memory entries, optionally filtered by category/tag

agent_memory_delete

Delete a single memory entry

agent_memory_search

Full-text search across key, value, and tags (substring or regex)

agent_list_skills

Discover skills available in the configured skills directory

agent_run_skill

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-mcp

After installation, three console scripts are available:

Script

Purpose

lmstudio-agent-mcp

Start the MCP server (serve is the default subcommand)

lmstudio-mcp-setup

Register this server with LM Studio's mcp.json

lmstudio-mcp-config

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.

  1. Editable / source install — a setuptools cmdclass hook appends an agent_mcp entry to ~/.lmstudio/mcp.json immediately after install.

  2. Wheel install (e.g. from PyPI) — the first time lmstudio-agent-mcp starts 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-script

Other 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-mcp

Usage 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_mcp

For 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

LMSTUDIO_AGENT_MEMORY_FILE

~/.lmstudio_agent_mcp/memory.json

Path to the persistent memory store

LMSTUDIO_AGENT_SKILLS_DIR

~/.agents/skills/

Directory scanned for user-defined skills

LMSTUDIO_AGENT_NO_AUTOREGISTER

0

Set to 1 to disable silent autoregistration on first serve

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

path

string

(required)

Absolute or relative path to the file

offset

int

0

Number of lines to skip from the beginning

limit

int | null

200

Maximum number of lines to return (null = unlimited)

encoding

string

"utf-8"

Text encoding

agent_write_file

Write text content to a file.

Parameter

Type

Default

Description

path

string

(required)

Absolute or relative path to the file

content

string

(required)

Text content to write

encoding

string

"utf-8"

Text encoding

append

bool

false

If true, append instead of overwrite

create_dirs

bool

true

If true, create parent directories when missing

agent_execute_command

Execute a terminal command.

Parameter

Type

Default

Description

command

string

(required)

Shell command to execute

working_directory

string | null

null

Working directory (defaults to server cwd)

timeout

float

60.0

Maximum execution time in seconds (1-600)

env

object | null

null

Additional environment variables to set

shell

bool

true

Execute through system shell (required for pipes/redirects)

Search the web using multiple search engines.

Parameter

Type

Default

Description

query

string

(required)

Search query (1-500 chars)

engine

string

"duckduckgo"

Search engine: duckduckgo, bing, google, or baidu

num_results

int

5

Maximum results to return (1-20)

region

string | null

null

Region/locale code (e.g. wt-wt, us-en, zh-cn)

agent_memory_save

Persist a key/value memory entry to disk for cross-session recall.

Parameter

Type

Default

Description

key

string

(required)

Unique identifier (1-200 chars)

value

string

(required)

Content to remember

category

string

"general"

Logical bucket for filtering

tags

string[]

[]

Tags for retrieval filtering

overwrite

bool

true

If false, fail when key already exists

agent_memory_load

Load a single memory entry by key.

Parameter

Type

Default

Description

key

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

category

string | null

null

Restrict to one category

tag

string | null

null

Restrict to entries carrying this tag

limit

int

100

Maximum entries to return (1-1000)

agent_memory_delete

Delete a single memory entry.

Parameter

Type

Default

Description

key

string

(required)

Key of the entry to delete

Full-text search across key, value, and tags.

Parameter

Type

Default

Description

query

string

(required)

Substring or regex to search for (1-500 chars)

use_regex

bool

false

Treat the query as a regular expression

category

string | null

null

Restrict the search to one category

limit

int

20

Maximum matches to return (1-200)

agent_list_skills

Discover skills available in the configured skills directory.

Parameter

Type

Default

Description

skills_dir

string | null

null

Override the skills directory

pattern

string | null

null

Glob pattern to filter skill names (e.g. trans*)

agent_run_skill

Invoke a discovered skill by name.

Parameter

Type

Default

Description

name

string

(required)

Skill name (subdirectory or filename without extension)

input

string

""

Primary input passed as the first argument

args

object

{}

Additional keyword arguments forwarded to the skill

skills_dir

string | null

null

Override the skills directory

timeout

float

60.0

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 supported

  • Large 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 clientsagent_execute_command and agent_run_skill (Python/shell) can run arbitrary code

License

MIT

Available Tools

11 tools
agent_execute_commandA
Destructive

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'.

ParametersJSON Schema
NameRequiredDescriptionDefault
envNoAdditional environment variables to set or override.
shellNoExecute the command through the system shell (required for pipes/redirects).
commandYesShell command to execute. Pipes and redirections are supported.
timeoutNoMaximum execution time in seconds.
working_directoryNoWorking directory for the command. Defaults to the server process cwd.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_skillsA
Read-onlyIdempotent

Discover and list skills available in the configured skills directory.

A skill is one of:

  • <skills_dir>/<name>/main.py (or run.py) with a run(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'.

ParametersJSON Schema
NameRequiredDescriptionDefault
patternNoOptional glob pattern to filter skill names (e.g. 'trans*').
skills_dirNoOverride the skills directory (defaults to LMSTUDIO_AGENT_SKILLS_DIR or ./skills).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_deleteA
DestructiveIdempotent

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesKey of the memory entry to delete.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_listA
Read-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'.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoOnly return entries carrying this tag.
limitNoMaximum number of entries to return.
categoryNoOnly return entries in this category.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_loadA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesKey of the memory entry to load.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_saveA
Idempotent

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').

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesUnique key to identify this memory entry.
tagsNoOptional list of tags for retrieval filtering.
valueYesContent to remember.
categoryNoLogical bucket for the entry (e.g. 'user_preference', 'project_note').general
overwriteNoIf False, fail when the key already exists.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_read_fileA
Read-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'.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesAbsolute or relative path to the file to read.
limitNoMaximum number of lines to return (null = unlimited).
offsetNoNumber of lines to skip from the beginning.
encodingNoText encoding to use when reading the file.utf-8

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_skillA
Destructive

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'.

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNoAdditional keyword arguments forwarded to the skill.
nameYesSkill name (subdirectory or file basename without extension).
inputNoPrimary input passed to the skill as the first argument.
timeoutNoMaximum execution time in seconds.
skills_dirNoOverride the skills directory.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_write_fileA
Destructive

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').

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesAbsolute or relative path to the file to write.
appendNoIf True, append to the file instead of overwriting.
contentYesText content to write to the file.
encodingNoText encoding to use when writing the file.utf-8
create_dirsNoIf True, create parent directories when they do not exist.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

A4.2/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessSyncing

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

Related MCP Servers

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/oemoem12/lmstudio-agent-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server